Java 事件驱动的未来<;V>;-线程池
我们使用Java 事件驱动的未来<;V>;-线程池,java,multithreading,callable,Java,Multithreading,Callable,我们使用callable和Future从线程池接收终止线程的结果。我们应该调用get()来接收返回的结果。我的问题是:它不是事件驱动的。对于C中的子进程,是否有类似于SIGCHLD的框架来获得结果? 我想要这样的东西:(当池中的每个线程完成任务时,线程池将调用此函数) public void fetchResult(线程t、可运行r、未来结果){ 整数x=result.get(); /*手柄x*/ /*我们还有线程和已终止的可运行对象*/ } 您可以轻松创建事件驱动模板。下面的伪代码说明了一种方
callable
和Future
从线程池接收终止线程的结果。我们应该调用get()
来接收返回的结果。我的问题是:它不是事件驱动的。对于C中的子进程,是否有类似于SIGCHLD
的框架来获得结果?
我想要这样的东西:(当池中的每个线程完成任务时,线程池将调用此函数)
public void fetchResult(线程t、可运行r、未来结果){
整数x=result.get();
/*手柄x*/
/*我们还有线程和已终止的可运行对象*/
}
您可以轻松创建事件驱动模板。下面的伪代码说明了一种方法
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();
}
}
您可能需要检查该方法。它在每个任务完成后调用。您可以创建ThreadPoolExecutor的自定义子类,该子类具有所需的基于事件的回调行为。您可以进一步表达它吗?你到底想要什么还不清楚“事件驱动”的哪一部分对你很重要?我假设这不是因为缺少忙等待,因为Future.get()不忙等待。@Avi:它不忙等待,但它会锁定。我不想锁门。我想主线程做一些工作。当池中的线程终止时,池调用一个函数,在该函数中,当我调用
Future.get()
时,它立即返回。可调用的线程实际在哪里执行?
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();