如何检查执行程序何时完成运行特定Runnable

时间:2013-05-27 13:53:36

标签: java concurrency runnable future futuretask

我正在寻找一种等待的方法,并在特定的Runnable在执行程序中执行完毕后得到通知。

我发现FutureTask有一个方法get但是,这会返回一个值。我的程序不期望返回值;有没有类似于FutureTask的数据结构而不需要返回值?几乎像FutureRunnable?

谢谢!

2 个答案:

答案 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());