Мой вопрос в том, что этот прецедент не существовал до того, как Java 5 или люди использовали его с помощью некоторых других методов?
Интерфейс Lock
был добавлен в Java 5, это то, что вы имеете в виду? Не знаю, что было раньше.
Я не могу понять необходимость выполнения альтернативных действий на основе доступности блокировки. Может ли кто-нибудь объяснить вам реальные случаи использования?
Несомненно. На самом деле сейчас написал один из них.Моя конкретная реализация Lock
- это распределенная блокировка, которая распределяется между кластерами серверов. Метод lock.tryLock(...)
вызывает вызовы RPC кластеру и ожидает ответов. Очень возможно, что несколько узлов, возможно, пытаются заблокировать, и их действия могут столкнуться, заставляя задерживать и, конечно же, один замок сбой. Это либо может вернуть false
, либо таймаут, и в этом случае мой код просто ждет и повторит попытку. Мой код буквально:
if (!clusterLock.tryLock(TRY_LOCK_TIME_MILLIS, TimeUnit.MILLISECONDS)) {
logger.warn("Could not lock cluster lock {}", beanName);
return;
}
Другой вариант использования может быть ситуация, когда одна часть кода содержит блокировку большого количества времени и других частей кода, возможно, не хотят долго ждать, и вместо этого хотят чтобы получить другую работу.
Вот еще одно место в моем коде, где я использую tryLock(...)
// need to wait for the lock but log
boolean locked = false;
for (int i = 0; i < TRY_LOCK_MAX_TIMES; i++) {
if (lock2.tryLock(100, TimeUnit.MILLISECONDS)) {
logger.debug("Lock worked");
locked = true;
break;
} else {
logger.debug("Lock didn't work");
}
}
вниз избирателю и человека, который голосовал, чтобы закрыть его, пожалуйста, вернуть ваши действия, если вы чувствуете так, поскольку его более двух дней и у вас недостаточно собеседников. Два ответа, размещенные здесь, дают очень полезную информацию, и я хочу, чтобы мой вопрос был замечен, но я думаю, что отрицательный голос является препятствием, поскольку большинство людей не любят отвечать на заданный вопрос. Не обращайте внимания, если вы этого не чувствуете. –