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()会一直阻塞,直到计算完成。