Вы можете использовать ReentrantReadWriteLock
.
ReadWriteLock lock = new ReentrantReadWriteLock();
...
lock.readLock().lock();
try {
//do reading stuff in here
} finally {
lock.readLock().unlock();
}
...
lock.writeLock().lock();
try {
//do writing stuff in here
} finally {
lock.writeLock().unlock();
}
Или, для чего-то более простого, вы можете синхронизироваться с интернированным (интернирование гарантирует, что объект String
является общим)String
объект, представляющий полное имя пути File
:
synchronized(file.getAbsolutePath().intern()) {
//do operations on that file here
}
Подход ReadWriteLock
будет иметь более высокую производительность, поскольку Thread
s будет разрешено читать файл одновременнов то время как синхронизация вручную не позволяет этого.