Я использую CountDownLatch для ожидания определенного события от другого компонента (работающего в другом потоке). Следующий подход соответствовал бы семантике моего программного обеспечения, но я не уверен, работает ли он так, как я ожидаю:
mCountDownLatch.await(3000, TimeUnit.MILLISECONDS)
otherComponent.aStaticVolatileVariable = true;
mCountDownLatch.await(3500, TimeUnit.MILLISECONDS);
... <proceed with other stuff>
Сценарий должен быть следующим: я жду 3 секунды, и если защелка не отсчитывается до 0, я уведомляю другой компонент с этой переменной, а затем жду не более 3,5 секунд. Если снова будет тайм-аут, мне все равно, и я продолжу другие операции.
Примечание: я знаю, что это не выглядит так, но описанный выше сценарий вполне разумен и допустим в моем программном обеспечении.
Я читал документацию по await(int,TimeUnit) и CountDownLatch, но я не специалист по Java/Android, поэтому мне нужно подтверждение. На мой взгляд, все сценарии выглядят допустимыми:
Правильно ли я использую await(...)? Можно ли использовать второй await(...) указанным выше образом, даже если предыдущий await(...) для того же объекта истек?