Синхронизация JAVA - Блокировка файлов
У меня есть следующий код, он является частью многопоточного кода сервера:
File ff=new File("../key.txt");
if(ff.exists())
{
try(
BufferedReader br = new BufferedReader(new FileReader("..\key.txt"))) {
for(String line2; (line2 = br.readLine()) != null; ) {
System.out.println("WE ARE READING 'KEY' ");
String a[]=line2.split("-");
k[i2]=a[0];
od[i2]=a[1];
ed[i2]=a[2];
System.out.println("key: "+k[i2]+" OD: "+od[i2]+" ED: "+ed[i2]);
}
}
}
Я читал о "синхронизации" в Java, но я не догадывался, как интегрировать его в мой код, я хочу заблокировать файл "ключ" всякий раз, когда пользователь использует его, так что другой пользователь в то же время не может получить к нему доступ, если кто-то еще уже использует его (по соображениям безопасности), есть идеи?
1 ответ
Решение
Если файл не используется в другом месте, кроме этого кода, вы можете просто синхронизировать блок:
synchronized {
File ff=new File("../key.txt");
if(ff.exists()) {
BufferedReader br = new BufferedReader(new FileReader(ff))) {
try(
// YOUR STUFF WITH br HERE
} finally {
br.close();
}
}
}
Если файл распределяется между несколькими частями кода, вы можете использовать постоянный монитор для синхронизации с ним (synchronized (MY_MONITOR_OBJECT) {...}
) или используйте замок ( документ здесь).