Вы можете использовать ReadWriteLock .В основном это работает так:
При чтении файла используйте этот блок кода:
Lock l = readwriteLock.readLock();
l.lock();
try {
// access the xml
} finally {
l.unlock();
}
, при записи используйте это:
Lock l = readwriteLock.writeLock();
l.lock();
try {
// access the xml
} finally {
l.unlock();
}
Несколько потоков могут читатьфайл в то же время.Только один поток может писать одновременно.Всякий раз, когда вы вызываете l.lock () для блокировки чтения, он проверяет, заблокирована ли в данный момент блокировка записи.Если это так, он ожидает unlock () для блокировки записи.
Всякий раз, когда вы вызываете l.lock () для блокировки записи, он проверяет, есть ли одна (или несколько) заблокированных в настоящее время блокировок чтения.Если это так, он ожидает разблокировки всех блокировок.
Таким образом, вы никогда не сможете писать, когда другой поток читает.И вы никогда не сможете читать, когда пишет другой поток (но работает чтение из нескольких потоков одновременно).