У меня есть 2 потока, которые одновременно обращаются к тому же большому файлу (.txt).java Память сопоставлена Файлы многопоточность чтение/запись
1-я нить читается из файла. Вторая нить записывает в файл.
Оба потока обращаются к одному и тому же блоку, например. (Старт: 0, размер блока: 10), но с различных каналов & Buffer экземпляров
Читатель:
{
int BLOCK_SIZE = 10;
byte[] bytesArr = new byte[BLOCK_SIZE];
File file = new File("/db.txt");
RandomAccessFile randomFile = new RandomAccessFile(file, "r");
FileChannel channel = randomFile.getChannel();
MappedByteBuffer map = channel.map(FileChannel.MapMode.READ_ONLY, 0, BLOCK_SIZE);
map.get(bytesArr , 0, BLOCK_SIZE);
channel.close();
}
Автор:
{
int BLOCK_SIZE = 10;
File file = new File("/db.txt");
RandomAccessFile randomFile = new RandomAccessFile(file, "rw");
FileChannel channel = randomFile.getChannel();
MappedByteBuffer map = channel.map(FileChannel.MapMode.READ_WRITE, 0, BLOCK_SIZE);
map.put(bytesToWrite);
channel.close();
}
Я знаю, что если оба начинается в одно и то же время, я получу Overlapping Exceptions! НО, что я хотел бы знать, в какой момент именно переплетение происходит? Я имею в виду, когда происходит «блокировка» точно? Пример: позволяет сказать, что доступ к писателю ПОЛУЧИТЬ первый, а затем, если читатель попытаться получить доступ, в какой момент это возможно ?:
FileChannel channel = randomFile.getChannel();
// 1- can reader access here?
MappedByteBuffer map = channel.map(FileChannel.MapMode.READ_WRITE, 0, BLOCK_SIZE);
// 2- can reader access here?
map.put(bytesToWrite);
// 3- can reader access here?
channel.close();
// 4- can reader access here?
1, 2, 3 или 4?
№ 4 уверен, потому что канал закрыт! Как насчет других точек?
Спасибо!
Я не вижу блокировки в вашем коде. –
Зачем использовать несколько потоков? Некоторый обзор вашего варианта использования поможет нам советовать. В общем, я рекомендую использовать только один поток для ввода-вывода, если не возникла очень специализированная ситуация. –
@ChrisK, я могу дать вам пример использования, но вы знакомы с JSF ManagedBeans? –