Есть ли способ разрешить нескольким потокам выполнять операции чтения/записи в RandomAccessFile
одновременно, то есть одновременно? Должен ли я использовать любой объект синхронизации, или это можно сделать без какой-либо синхронизации?Как разрешить нескольким потокам одновременный доступ к файлу произвольного доступа в Java
ответ
Вы должны использовать какой-то метод синхронизации. В файле может быть только одна позиция файла. Если вы попробуете одновременный доступ без синхронизации, поведение в лучшем случае непредсказуемо.
Как сказал Эрик, должен быть механизм синхронизации. В противном случае это станет проблемой «Читатели/Писатели».
Если вам нужно ускорить работу, вы можете иметь несколько чтений вместе, и всякий раз, когда вам нужно писать, останавливать новые запросы на чтение, оставлять существующий запрос завершенным, получать блокировку, записывать в файл, освобождать блокировку.
ReentrantReadWriteLock может вам помочь.
Если RandomFileAccess не является абсолютным требованием, можно также взглянуть на то, что предоставляет java.nio.channels.FileChannel с точки зрения произвольного доступа, общей/эксклюзивной блокировки (сегментов) файла и прямого отображения в памяти с помощью напишите. Хотя, как и RandomAccessFile, FileChannel имеет только одну позицию в любой момент времени, сохраняя необходимость синхронизации в какой-то момент. – GPI
Не было сказано, что файл будет доступен только через один FileChannel, дескриптор файла или что-то еще. – Ingo
Файл с произвольным доступом ведет себя так же, как и оперативное запоминающее устройство - он открыт для всех видов гонок данных. Следовательно, до тех пор, пока вы не видите, что разные потоки работают в разных регионах файла, вы абсолютно должны использовать синхронизацию.
- 1. Доступ к нескольким потокам в java
- 2. разрешить доступ к файлу доступа к файлу php через .htpasswd?
- 3. Доступ к нескольким потокам к переменной
- 4. Эффективная структура для доступа к нескольким потокам
- 5. Как разрешить нескольким потокам управлять одним объектом данных в Java
- 6. Aws arn kinesis доступ к нескольким потокам
- 7. PHP Одновременный доступ к файлу/flock() issue
- 8. Доступ к файлу для доступа к нескольким доменам Simple_XML отключен
- 9. Java 7 Синхронизированный метод, похоже, разрешает доступ к нескольким потокам
- 10. переменного экземпляра в классе Singleton доступа к нескольким потокам
- 11. Зачем обращаться к файлу произвольного доступа сбой платформы Java?
- 12. Как разрешить одновременный доступ к тому же маршруту?
- 13. C++ Присоединиться к нескольким потокам
- 14. Простой API для произвольного доступа к сжатому файлу данных
- 15. Разрешить доступ только скрипту к файлу iis7.5
- 16. Запись в Java по нескольким потокам
- 17. Я хочу разрешить одновременный доступ к чтению xml-файла
- 18. Разрешить доступ к защищенному файлу через PHP
- 19. Ограничить одновременный доступ к приложению Asp.Net
- 20. Как разрешить путь к статическому файлу в Java?
- 21. Доступ к файлу по нескольким процессам
- 22. Доступ к ресурсу Java как к файлу
- 23. Одновременный доступ к файлам
- 24. Nodejs & aws-sdk: одновременный доступ к нескольким регионам?
- 25. Разрешить доступ к определенному файлу в PHP
- 26. Доступ к потокам без камеры
- 27. Доступ к внешнему файлу Java
- 28. .htaccess Разрешить доступ к определенному файлу
- 29. Разрешить доступ к файлу PHP через приложение
- 30. JUnit одновременный доступ к synchronizedSet
Посмотрите на http://stackoverflow.com/questions/464784/java-reentrantreadwritelocks-how-to-safely-acquire-write-lock. Лучше всего использовать базу данных, такую как http://www.sqlite.org или другой. –