ListenableFuture и Guava вообще не вступают в это. Способ сделать это состоит в том, чтобы реализовать стек с LinkedBlockingDeque , иметь метод для добавления элементов в стек, используя addFirst, и использовать pollFirst (long, TimeUnit), чтобы ожидать указанное количество времени для объекта, чтобы вставь.
Никогда не используйте низкоуровневые инструменты параллелизма, такие как ожидание и уведомление, если вы можете выполнить ту же работу с поддержкой библиотеки.