[英]Event Driven Future<V> - Thread Pool
我们使用callable<V>
和Future<V>
从线程池接收终止线程的结果。 我们应该调用get()
来接收返回的结果。 我的问题是:它不是事件驱动的。 是否有任何框架可以为C中的子进程获取SIGCHLD
结果? 我想要这样的东西:(当池中的每个线程完成作业时,线程池将调用此函数)
public void fetchResult(Thread t, Runnable r, Future<Integer> result) {
Integer x = result.get();
/* handle x */
/* also we have Thread and Runnable object that has terminated */
}
您可能想要查看ThreadPoolExecutor.afterExecute()方法。 在每个任务完成后调用它。 你可以创建一个ThreadPoolExecutor的自定义子类,它具有你想要的基于事件的回调行为。
您可以轻松创建事件驱动模板。 以下伪代码说明了一种方法。
abstract class EventTemplate<T> implements Runnable {
private BlockingQueue<T> queue;
public void submit(Callable<T> callable) {
queue.add(callable);
}
public abstract void handleEvent(T t);
public void run() {
for(;;) handleEvent(queue.take());
}
public void start() {
new Thread(this).start();
}
}
类可以扩展模板
class FooEventHandler extends EventTemplate<Foo> {
public void handleEvent(Foo foo) {
// do something
}
}
哪个可以实例化
new FooEventHandler().start();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.