Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / threads und outputstreamwriter / 25 сообщений из 26, страница 1 из 2
01.03.2016, 16:57
    #39182804
lor2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
threads und outputstreamwriter
такая тема ))
открываю новый osw чтоб писать туда что то.

делаю пару записей,
следом создаю два треда, в каждом так же в этот osw начинаю писать, следом по заканчивании треда пишу в osw снова в корневом треде (где и создал осв).

смотрим файл есть записи только из корневого треда. а два параллельных подтреда пишут только стрим клозед. такое ощущение что когда треды получают стрим он почему то оказывается закрытым?? а почему. как сделать его открытым для параллельных тредов? пробовал с разными врайтерами - результат одинаков. есть вариант в каждом треде по разу открывать его и писать но мне этот вариант не нравится.
...
Рейтинг: 0 / 0
01.03.2016, 17:10
    #39182825
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
threads und outputstreamwriter
lor2,

Вам бы про файловые системы почитать чего-нибудь. Обычно, для записи файл открывается эксклюзивно не давай другим процессам писать в тоже время.
Параллельная запись из разных потоков не имеет особого смысла, так как данные в файле будут иметь случайный порядок полностью нарушающих их смысловую ценность.

Решений есть как минимум два.
Простое и банальное. Заворачиваем запись в synchronized. Для каждой записи открываем FileOutputStream и закрываем.
Кстати, документацию тоже надо бы читать. OutputStreamWriter, про который вы спрашиваете, к файловой системе отношения не имеет. Это лишь обертка для текстовой записи в двоичный поток данных.

Второе решение является более оптимальным с точки зрения производительности. Им пользуются, например, фреймверки логирования. Все события записи складываются в очередь. Цельными блоками. Отдельный Thread разгребает очередь и пишет последовательно в файл.
...
Рейтинг: 0 / 0
01.03.2016, 18:59
    #39182961
lor2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
threads und outputstreamwriter
Blazkowiczlor2,

Вам бы про файловые системы почитать чего-нибудь. Обычно, для записи файл открывается эксклюзивно не давай другим процессам писать в тоже время.
Параллельная запись из разных потоков не имеет особого смысла, так как данные в файле будут иметь случайный порядок полностью нарушающих их смысловую ценность.

Решений есть как минимум два.
Простое и банальное. Заворачиваем запись в synchronized. Для каждой записи открываем FileOutputStream и закрываем.
Кстати, документацию тоже надо бы читать. OutputStreamWriter, про который вы спрашиваете, к файловой системе отношения не имеет. Это лишь обертка для текстовой записи в двоичный поток данных.

Второе решение является более оптимальным с точки зрения производительности. Им пользуются, например, фреймверки логирования. Все события записи складываются в очередь. Цельными блоками. Отдельный Thread разгребает очередь и пишет последовательно в файл.
ну я так и делал - открывал поток изнутри и закрывал изнутри. тут ясно. вопросов нет оно работает. заворот записи в синхронайзд не имеет смысла, т.к. осв в нить передается не открытым. почему хз. или он не по ссылке передается или я чего то не знаю. просто мне интересно было сделать именно так, чтоб в открытый поток нити сыпали строки и всё, как в консоль. ну, нет так нет. то что это обертка это я знаю дело в том что именно поток сам закрытый. я и буфередрайтеры пробовал и все остальные ))
...
Рейтинг: 0 / 0
01.03.2016, 19:02
    #39182966
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
threads und outputstreamwriter
lor2ну я так и делал - открывал поток изнутри и закрывал изнутри. тут ясно. вопросов нет оно работает. заворот записи в синхронайзд не имеет смысла, т.к. осв в нить передается не открытым. почему хз. или он не по ссылке передается или я чего то не знаю. просто мне интересно было сделать именно так, чтоб в открытый поток нити сыпали строки и всё, как в консоль. ну, нет так нет. то что это обертка это я знаю дело в том что именно поток сам закрытый. я и буфередрайтеры пробовал и все остальные ))
Отличный набор слов. Вопросов нет. Кода нет. Полагаю проблема решена?
...
Рейтинг: 0 / 0
01.03.2016, 19:27
    #39182992
Марс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
threads und outputstreamwriter
lor2, не уверен что вы хотите чтоб много тредов писало в один файл действительно одновременно - даже если файловая система такое разрешает - если один байт из одного потока, а другой из другого то читать это будет ... неудобно.
...
Рейтинг: 0 / 0
01.03.2016, 19:34
    #39182993
lor2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
threads und outputstreamwriter
причем тут фс. для ос ты что 1 тред запустишь что 100 - для нее это всё-равно будет один процесс, жвм называется. в консоль же ты можешь выводить с нескольких тредов? а почему ты в файл не можешь? суть разницы то нет.
...
Рейтинг: 0 / 0
01.03.2016, 19:56
    #39183012
lor2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
threads und outputstreamwriter
Blazkowiczlor2ну я так и делал - открывал поток изнутри и закрывал изнутри. тут ясно. вопросов нет оно работает. заворот записи в синхронайзд не имеет смысла, т.к. осв в нить передается не открытым. почему хз. или он не по ссылке передается или я чего то не знаю. просто мне интересно было сделать именно так, чтоб в открытый поток нити сыпали строки и всё, как в консоль. ну, нет так нет. то что это обертка это я знаю дело в том что именно поток сам закрытый. я и буфередрайтеры пробовал и все остальные ))
Отличный набор слов. Вопросов нет. Кода нет. Полагаю проблема решена?
нет в общем, если я фос (файлаутпутстрим) передаю в нить, то в нее всё пишется как положено, если я этот фос оборачиваю в осв - то осв (аутпутстримрайтер) говорит что поток закрыт. следом пишу в этот поток байт - оно пишет.

если делаю напрямую набор байтов в поток без синхрона то два потока выдают примерно такой вид: адддададддадада, после синхрона как положено идет ааааааааддддддд. т.е. всё собссно пашет так как должно пахать. но меня заботит почему если я оборачиваю поток - оно говорит что поток закрыт?

код вот:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
 public static void main(String args[]) throws Exception {

        final File f = new File("test.txt");
        final FileOutputStream fos = new FileOutputStream(f);


        final Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (fos) {

                        [color=red]OutputStreamWriter osw = new OutputStreamWriter(fos);[/color]

                    for (int a = 0; a < 10; a++) {
                        pause(300);
                        try {
                           [color=red] osw.write("some string");[/color]
                            fos.write(44);
                            System.out.println("thread1=" + a);
                        } catch (IOException e) {
                            e.printStackTrace();
                        }

                    }

                }

            }
        });

        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (fos) {
                    for (int a = 0; a < 10; a++) {
                        pause(300);
                        try {
                            fos.write(100);
                            System.out.println("thread2=" + a);
                        } catch (IOException e) {
                            e.printStackTrace();
                        }

                    }
                }
            }
        });

        t1.start();
        t2.start();
    }
...
Рейтинг: 0 / 0
02.03.2016, 08:53
    #39183232
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
threads und outputstreamwriter
lor2,

Дурдом "Ромкашка". Какой смысл в synchronized заворачивать тело всего потока? Я писал о том чтобы синхронизировать запись одного сообщения. Тогда сохраниться целостность сообщений. Хотя, в случае FileOutputStream, похоже там где-то таки есть синхронизация на уровне файловой системы и реализации. Добиться смешивания под виндой не выходит.

Никаких исключений не вижу. Подозреваю что приведенный код не полон. Приведите исключение (полностью, а не то только сообщение).
...
Рейтинг: 0 / 0
03.03.2016, 07:07
    #39184420
lor2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
threads und outputstreamwriter
Blazkowicz,
это не "реальный" код конечно же я просто пытаюсь разобраться в конкурренси на таких примерах, в общем, код писал по памяти тут действительно ексепшена нет )) чот я намудрил. чтоб получить ту картинку какую я ожидал я просто забыл флюш сделать а потом закрыть ОСВ (рукалицо) если не сделать флюш, то изменения "коммитятся" на момент клоуз.

в общем, благодарю. целительная сила форума - запость сюда дурь и потом сразу же поймешь проблему.
...
Рейтинг: 0 / 0
03.03.2016, 09:06
    #39184455
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
threads und outputstreamwriter
lor2я просто забыл флюш сделать
OMFG
...
Рейтинг: 0 / 0
03.03.2016, 11:04
    #39184569
lor2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
threads und outputstreamwriter
я спикинг по аелтсу сдал на 7 - мне можно

зы, просто в транскрипции флэш писать можно подумать flash а так - всё однозначно.
...
Рейтинг: 0 / 0
03.03.2016, 11:25
    #39184589
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
threads und outputstreamwriter
А я подумал что ТС - немец. Он тему оформил как threads УНД outputstreamwriter.
...
Рейтинг: 0 / 0
03.03.2016, 12:01
    #39184645
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
threads und outputstreamwriter
maytonА я подумал что ТС - немец. Он тему оформил как threads УНД outputstreamwriter.
))) LOL
...
Рейтинг: 0 / 0
03.03.2016, 12:27
    #39184707
lor2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
threads und outputstreamwriter
Petro123,

не стебитесь! их шпрахе дойче шлехт. майне шпрахе ист енглиш унд руссиш!
...
Рейтинг: 0 / 0
03.03.2016, 12:29
    #39184716
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
threads und outputstreamwriter
Крутяк. Зато ты можешь Раммштайн слушать в подлиннике.
...
Рейтинг: 0 / 0
03.03.2016, 12:33
    #39184727
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
threads und outputstreamwriter
lor2их шпрахе дойче шлехт
Ну, ведь "шпрехе" же...
...
Рейтинг: 0 / 0
03.03.2016, 12:34
    #39184728
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
threads und outputstreamwriter
maytonКрутяк. Зато ты можешь Раммштайн слушать в подлиннике.
Ты слушаешь в переводе?
...
Рейтинг: 0 / 0
03.03.2016, 12:34
    #39184732
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
threads und outputstreamwriter
BlazkowiczmaytonКрутяк. Зато ты можешь Раммштайн слушать в подлиннике.
Ты слушаешь в переводе?
Я искал отдельно Lyrics. И читал слушая.
...
Рейтинг: 0 / 0
03.03.2016, 12:37
    #39184740
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
threads und outputstreamwriter
maytonBlazkowiczпропущено...

Ты слушаешь в переводе?
Я искал отдельно Lyrics. И читал слушая.
Это был риторический вопрос. :)
...
Рейтинг: 0 / 0
03.03.2016, 13:01
    #39184794
Марс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
threads und outputstreamwriter
Blazkowicz,

У рамштайн есть минимум одна песня на русском (ковер "Штиль"), ещё есть минимум одна на испанском.
...
Рейтинг: 0 / 0
03.03.2016, 13:20
    #39184838
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
threads und outputstreamwriter
Марсковер "Штиль"
Прямо пост изнасилования транслитерации.
...
Рейтинг: 0 / 0
03.03.2016, 14:09
    #39184918
lor2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
threads und outputstreamwriter
мы ж русскими буквами пишем. как хотим - так и пишем. Кстати, у вас ник интересный, как правильно прочесь? Блачкович или Блакович? (зы, ни в коем разе не подкалываю, просто интересно).
...
Рейтинг: 0 / 0
03.03.2016, 19:14
    #39185323
lor2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
threads und outputstreamwriter
тупой вопрос по тредам и т.п. )) в чем суть проблемы потокобезопасности? в плане именно потокоопасности? скажем, у меня лист есть - как можно его испортить многопоточкой и что будет если я его сделаю коллекшнз.синхронайз?
...
Рейтинг: 0 / 0
03.03.2016, 19:32
    #39185340
Марс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
threads und outputstreamwriter
https://docs.oracle.com/javase/tutorial/essential/concurrency/sync.html . Конкретно с коллекциями не сталкивался, но насколько понимаю threadsafe вовсе не означает что использование гарантирует от ошибок доступа - код всё-равно надо синхронизировать по объекту.
...
Рейтинг: 0 / 0
03.03.2016, 19:33
    #39185341
lor2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
threads und outputstreamwriter
а в чем тогда смысл между хашмап и хаштабель?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / threads und outputstreamwriter / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]