Лучшее решение, чем 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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