Если я понимаю, что вы пытаетесь сделать, это отправить некоторый код для асинхронного запуска, тогда вы сможете дождаться его завершения (успешно или неудачно).Если это так, вы должны взглянуть на Futures .
Вот пример, основанный на Javadoc:
FutureTask<String> future =
new FutureTask<String>(new Callable<String>() {
public String call() {
// do stuff
return "result";
}});
Этот код создает объект "будущее"msgstr "это может быть вызвано для выполнения поисковика. поиск (цель).На этом этапе код не выполняется вообще.У вас просто есть объект, представляющий вычисления, которые могут выполняться асинхронно.Для этого вы должны позвонить:
ExecutorService executor = Executors.newFixedThreadPool(5);
executor.execute(future);
Этот фрагмент создал Executor
(который является фиксированным пулом из 5 потоков), а затем передал ему будущее для выполнения.Исполнитель будет выполнять вычисления из Future
в асинхронном режиме.
Future
предлагает несколько методов (см. Javadoc) для ожидания завершения, отмены, проверки состояния завершения и т. Д. Например,
String result = future.get();
заблокирует, ожидая результата бесконечно.Функция get (10, TimeUnit.SECONDS) будет ждать 10 секунд, а если будущее не завершено, бросить.