Лучшее решение, чем while (reentrantLock.isLocked()) для ожиданияJAVA

Программисты JAVA общаются здесь
Anonymous
Лучшее решение, чем while (reentrantLock.isLocked()) для ожидания

Сообщение Anonymous »

У меня есть служебный компонент, который обеспечивает доступ к карте. Время от времени мне нужно перестроить содержимое карты, что занимает несколько секунд, и я хочу заблокировать доступ к карте на время ее восстановления, поскольку к ней можно получить доступ из разных потоков.

Код: Выделить всё

@Service
public class MyService {
private Map cache = null;
private ReentrantLock reentrantLock = new ReentrantLock();

public void rebuildCache(){
try {
reentrantLock.lock();
cache = new ConcurrentHashMap();
... //processing time consuming stuff and building up the cache
}finally {
reentrantLock.unlock();
}
}

public Value getValue(Key key){
while (lock.isLocked()){}
return cache.get(key);
}
...
}
Как видите, я использую

Код: Выделить всё

while (reentrantLock.isLocked()){}
чтобы проверить, заблокирован ли замок, и дождаться его разблокировки. Это решение кажется довольно грязным. Есть ли лучшее решение?

Подробнее здесь: https://stackoverflow.com/questions/328 ... or-waiting

Вернуться в «JAVA»