我正在寻找一种等待的方法,并在特定的Runnable在执行程序中执行完毕后得到通知。
我发现FutureTask有一个方法get
但是,这会返回一个值。我的程序不期望返回值;有没有类似于FutureTask的数据结构而不需要返回值?几乎像FutureRunnable?
谢谢!
答案 0 :(得分:2)
当任务完成时,没有任何机制(甚至理论上不会)以某种方式“通知父线程”。首先,您submit
任务发布festum 的线程将成为 ExecutorService 内部线程的父线程;第二,如果您的调用线程并非专门用于侦听此类事件,则不能从外部“插入”,中断其正在执行的操作,并接收通知。
使用标准Java的 ExecutorService API,你很遗憾不会通过回调获得异步通知;你得到的只是轮询方法和阻止方法。
答案 1 :(得分:1)
也许this method是你需要的。
当您提交Runnable时,Executor会返回FutureTask。
例:
public class MyTask implements Runnable
{
@Override
public void run()
{
...
}
}
ExecutorService s = Executors.newSingleThreadExecutor();
Future<?> submit = s.submit(new Task());