Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何向调用方线程发出ExecutorService已完成任务的信号_Java_Multithreading_Concurrency_Executorservice - Fatal编程技术网

Java 如何向调用方线程发出ExecutorService已完成任务的信号

Java 如何向调用方线程发出ExecutorService已完成任务的信号,java,multithreading,concurrency,executorservice,Java,Multithreading,Concurrency,Executorservice,从主线程: executorService.submit(new Runnable() { ... }); 现在,当Runnable完成执行时,是否有Java的标准方式来向调用线程发送它已完成执行的信号,而无需创建新的接口/侦听器类 如果信号可以从调用者线程发出,则可获得额外点数。submit返回一个值,提交线程可以在该值上调用阻止,直到任务完成 Future<?> future = executor.submit(new Runnable() { ... }); future.g

从主线程:

executorService.submit(new Runnable() { ... });
现在,当Runnable完成执行时,是否有Java的标准方式来向调用线程发送它已完成执行的信号,而无需创建新的接口/侦听器类


如果信号可以从调用者线程发出,则可获得额外点数。

submit
返回一个值,提交线程可以在该值上调用阻止,直到任务完成

Future<?> future = executor.submit(new Runnable() { ... });
future.get();
Future-Future=executor.submit(新的Runnable(){…});
future.get();

您可以阻止返回的未来对象的get(),也可以对其轮询isDone()方法。或者,你也可以使用谷歌番石榴图书馆,它有

我不确定您的实现以及将同时运行多少线程,因此这可能不起作用。您可以看到的一件事是通过调用一个知道如何更新所需UI组件的方法来完成runnable itsself信号

如果我使用future.get(),调用线程必须有意识地调用它,以查看是否完成了。我的应用程序中的调用者线程恰好是一个UI线程,它不能有任何阻止操作,但它需要在刷新视图时接收某种更新。您需要向UI线程提交任务,以便在完成后运行。UI线程的事件循环将拾取任务并运行它。或者您可以在UI线程中安排一个定期任务,定期轮询未来,直到
isDone
返回
true
。我很确定get()会一直阻塞,直到计算完成。