4

我们使用callable<V>andFuture<V>来接收来自线程池的终止线程的结果。我们应该调用get()以接收返回的结果。我的问题是:它不是事件驱动的。是否有任何框架可以像SIGCHLDC 中的子进程一样获得结果?我想要这样的东西:(当池中的每个线程完成工作时,线程池将调用此函数)

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 */
}
4

2 回答 2

1

您可能想查看ThreadPoolExecutor.afterExecute()方法。每个任务完成后都会调用它。您可以创建 ThreadPoolExecutor 的自定义子类,它具有您想要的基于事件的回调行为。

于 2011-10-28T18:58:59.700 回答
0

您可以轻松创建事件驱动模板。以下伪代码说明了一种方法。

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();
于 2011-10-23T18:04:46.687 回答