Множественные вызовы CountDownLatch.await(int) с тайм-аутом

Я использую 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 истекает, то другой await остается действительным; поэтому, если другой поток замечает статический сигнал, второй await может завершиться успешно
  • Время ожидания обоих вызовов await истекло (согласно семантике моей программы это нормально)

Правильно ли я использую await(...)? Можно ли использовать второй await(...) указанным выше образом, даже если предыдущий await(...) для того же объекта истек?

6
задан Thomas Calc 26 May 2012 в 23:05
поделиться