Мне нужно заблокировать текущий поток, пока не назову один из двух следующих методов (которые я создал).Как заблокировать текущий поток, пока пользователь не вызовет определенный метод?
onJobComplete()
onJobError(Throwable t)
Эти методы будут вызываться из другого потока.
Возможно ли это с CountDownLatch(1)
? (который я бы уменьшил при вызове любого из этих двух методов). Кажется, я могу использовать только CountDownLatch
с новинками.
Если нет, то как я могу это сделать?
фон: https://github.com/ReactiveX/RxJava/issues/5094 (мне нужно сделать ниже синхронной onRun()
методом из 3 партии библиотеки асинхронных)
/**
* The actual method that should to the work.
* It should finish w/o any exception. If it throws any exception,
* {@link #shouldReRunOnThrowable(Throwable, int, int)} will be
* automatically called by this library, either to dismiss the job or re-run it.
*
* @throws Throwable Can throw and exception which will mark job run as failed
*/
abstract public void onRun() throws Throwable;
Дополнительная информация: Из-за ограничений библиотеки, я не могу контролировать, когда onRun()
начинается. Библиотека требует, чтобы этот метод был синхронным, потому что его завершение автоматически сигнализирует библиотеке, что «задание» успешно завершено. Я хочу «приостановить» onRun()
и не дать ему вернуться, запустить собственный асинхронный поток (ы) и «возобновить» onRun()
(разрешить возврат onRun()
) после завершения моего асинхронного потока.
Я бы эти два метода устанавливают логическое значение и run sleep до тех пор, пока переменная не изменится, или как насчет 'wait/notify'? –
Итак, какова ваша «текущая тема»? Может ли вопрос быть более конкретным? 'wait' /' notify' (или 'await' /' signal') кажется чем-то, что вы можете изучить. Но есть и другие лучшие конструкции параллелизма, такие как «Будущее». Ваш вопрос слишком расплывчатый, чтобы люди предлагали –
Определенно, используйте 'Future'. – dimo414