Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> многопоточная работа с файлом, многопоточная работа с файлом 
:(
    Опции темы
bocharov
Дата 14.2.2008, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 23.1.2008

Репутация: нет
Всего: нет



нужно несколькими процессами писать в файл и несколькими читать. Как лучше сделать?
PM MAIL   Вверх
Platon
Дата 14.2.2008, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



Исходя из постановки задачи могу предложить такой вариант:

Код

public class ThreadSafeOutputStream {
     private final Object LOCK = new Object();
     private OutputStream stream;

     public ThreadSafeOutputStream(OutputStream stream) {
         this.stream = stream;
     }

     public void write(byte[] message) {
          synchronized(LOCK) {
              stream.write(message);
          }
     }
     // и так все нужные методы записи
}


И таким же образом ThreadSafeInputStream
Хотя надо поискать, может есть стандартное решение.
PM MAIL ICQ   Вверх
Platon
Дата 14.2.2008, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



или может тебе нужно что-то конкретное.

типа:

Код

public class KindOfWriter {
    private final Object LOCK = new Object();
    private DataOutputStream stream;


    public KindOfWriter(OutputStream stream) {
        this.stream = new DataOutputStream(stream);
    }


    public void writeObject1(Object1 obj) {
        synchronized(LOCK) {
            stream.writeInt(obj.getInt1());
            stream.writeInt(obj.getInt2());
            // и т.п.
        }
    }

    public void writeObject1(Object2 obj) {
        synchronized(LOCK) {
            stream.writeChar(obj.getChar1());
            stream.writeChar(obj.getChar2());
            // и т.п.
        }
    }
}

PM MAIL ICQ   Вверх
bocharov
Дата 14.2.2008, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 23.1.2008

Репутация: нет
Всего: нет



задача такова что файл пишеться и читается многими процессами. а эта синхронизация на уровне потоков на сколько я понимаю. я вот искал как файл открыть в монопольном режиме. то есть средствами ОС разделить файл как ресурс.
PM MAIL   Вверх
jManiak
Дата 14.2.2008, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 6.2.2007
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Ну, как вариант можно сделать сетевой сервер, на который будут приходить данные от других процессов, а он уже последовательно будет писать и читать и отправлять обратно.

Добавлено через 1 минуту и 25 секунд
Кстати, а что за задача вообще? может необязательно писать все это в один файл?
PM MAIL ICQ   Вверх
bocharov
Дата 15.2.2008, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 23.1.2008

Репутация: нет
Всего: нет



у меня одна пачка процессов генерят некие ID (номера). Их надо передать пачке процессов для дальнейшей обработки.
а че за сервер по какому протоколу?
PM MAIL   Вверх
Vladk
Дата 15.2.2008, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 19.6.2007

Репутация: нет
Всего: нет



Все что вам нужно и много больше есть в классе FileChannel - читайте доки
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1111 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.