事件驱动的未来- 线程池

发布于 2024-12-11 18:00:57 字数 441 浏览 0 评论 0原文

我们使用 callableFuture 从线程池接收终止线程的结果。我们应该调用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 */
}

We use callable<V> and Future<V> to receive the result of a terminated thread from a thread pool. We should call get() to receive the returned result. My problem is: it is not event driven. Is there any framework to get result like SIGCHLD for child processes in C?
I want something like this:(the thread pool will call this function when each thread in the pool finished the job)

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

心头的小情儿 2024-12-18 18:00:57

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

you might want to check out the ThreadPoolExecutor.afterExecute() method. it's called after each task completes. you could create a custom subclass of ThreadPoolExecutor which has the event based callback behavior you desire.

梦与时光遇 2024-12-18 18:00:57

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

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

You could easily create an event driven template. The following pseudo-code illustrates one approach.

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();
    }
}

Classes can the extend the template

class FooEventHandler extends EventTemplate<Foo> {
    public void handleEvent(Foo foo) {
        // do something 
    }
}

Which can be instantiated

new FooEventHandler().start();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文