У меня есть несколько потоков (некоторые из них порождаются Process X, другие - Process Y, et cetera), и каждый поток должен записывать в файл MyFile
. Однако, если Thread T1
начинает сначала записывать в MyFile
, а затем, когда Thread T2
начинает писать, ему нужно дождаться T1
, чтобы освободить файл, чтобы он мог прочитать содержимое, написанное в Thread T1
, Другими словами, каждый поток будет иметь метод finalizeThread
, например:
private void finalizeThread() {
File f = new File("MyFile.dat");
f.createNewFile(); // atomically creates the file, if it doesn't exist
locked_section {
readContentsFromFile(f); // read contents if some other thread already modified the file
modifyContentsFromFile(f); // modify
writeFile(f); // write, so that new threads can see the content modified by this thread
}
}
Мой вопрос: как я могу выполнить locked_section
в приведенном выше коде? Я изучал класс FileLock
, но в Javadoc говорится, что "Блокировки файлов хранятся от имени всей виртуальной машины Java. Они не подходят для управления доступом к файлу несколькими потоками на той же виртуальной машине.".