Да, CountDownLatch
гарантирует видимость¹, поэтому, если await
не истечет время ожидания, results[0]
будет хорошо. Однако код, вероятно, можно было бы переписать, чтобы он был немного понятнее.
¹ т.е. все записи из потока до того, как countDown()
произойдет до того, как другой поток вернется из вызова await()
.
A немного Более четкая (ИМХО) версия будет использовать CompletableFuture
следующим образом:
CompletableFuture<Object> future = new CompletableFuture();
EventObjectListener eventListener = (topic, eventObject) ->
future.complete(eventObject);
try {
return future.get(waitMagnitude, waitUnit);
} catch(Exception e) {
return null;
} finally {
eventReceiver.removeEventListener(eventListener);
}