У меня есть статический служебный класс, FileUtils
который имеет следующий метод:Параллельный поток I/O доступ
public static Object readDataFromInternalStorage(String fileName)
{...}
public static synchronized void
writeDataToInternalStorage(Serializable theData, String fileName)
{...}
Я сталкиваясь с нечетным java.io.EOFException в моем методе чтения при попытке чтения из внутренних место хранения. Это многопоточное приложение, в котором несколько потоков могут одновременно обращаться к этому коду (хотя это не обычный случай). Немного подумав об этом, мое подозрение заключается в том, что при чтении файла появляется еще один поток и записывается в файл до завершения чтения, тем самым искажая чтение. Правильно ли мое предположение?
Предполагая, что это лучший способ исправить это? Является ли ответ просто добавлением «synchonized» в мой метод чтения, который, если я читаю this post, правильно блокирует весь класс?
Большое спасибо. Его довольно непривычно, что в моем коде было бы два потока читать или писать одновременно, поэтому я думаю, что я буду придерживаться более простого решения синхронизации чтения, но спасибо за ReentrantReadWriteLock. Выглядит очень интересно, будет помнить о будущем –