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