当前位置: 首页 > 知识库问答 >
问题:

多线程池集成

蔚琦
2023-03-14

在我的主流程中,我有一个线程池ExecutorService,我用我调用的“已知”数量的可调用项来填充它。

此外,还有另一个ExecutorService对象称为“全球池”(我认为ExecutorService是线程安全的,我可以从不同的线程向其添加任务)。

现在,上面的每个Callable都会产生新的任务,并将它们(提交)到这个共享的“全球池”。

问题是,我无法知道(无法阻止)所有任务何时完成,以及是否没有更多传入的任务。

请协助。

代码段:

public class Worker implements Callable {

        private ExecutorService sharedPool;

        public Worker (ExecutorService pool){
          this.sharedPool = pool;
        }




    public boolean call() {
        for (int i = 0; i<100; i++){
           if(i % 10 == 0){
              sharedPool.submit(new Runnable() {                            
                            public void run() {
                               heavyTaskHere();
                            }
                        }   
           }

        }

    }

}


Main flow:

ExecutorService sharedPool = new Executors.newFixedThreadPool(X);
List<Callable<Boolean>> mainthareadPool=  new ArrayList<Callable<Boolean>>();
ExecutorService executor =  Executors.newFixedThreadPool(N);


for (int i = 0; i<10; i++){
  Wroker w = new Worker (sharedPool);
    mainthareadPool.add(w);
}


executor.invokeAll(mainthareadPool);

在我看来,呼叫者将在他们的可呼叫者结束之前结束。

共有1个答案

宋志学
2023-03-14

如果调用所有可调用项,则会返回与可调用项对应的未来列表。有了这个未来,您只需查看您的FutureList.get(futureOfInterestIndex.isOne()是否已完成可调用项

 类似资料:
  • 这里首先介绍了java5中的并发的小工具包:java.util.concurrent.atomic,然后介绍了线程池的概念,对使用java5的方式创建不同形式的线程进行了演示,之后介绍了两个 对象:Callable和Future,用于获取线程执行后的结果,对于线程锁技术则在另外一篇文章中介绍。 Java5中的线程并发库都在java.util.concurrent包及子包中 1. Executor类

  • 我有一个图像路径列表,我想在进程或线程之间划分,以便每个进程处理列表的某些部分。处理包括从磁盘加载图像,进行一些计算并返回结果。我正在使用Python 2.7 下面是我如何创建辅助进程 我所面临的问题是,当我在initializer函数中记录初始化时间时,我知道worker不是并行初始化的,而是每个worker都以5秒的间隔初始化,下面是供参考的日志 我尝试过使用将同时启动辅助线程 我知道Wind

  • 问题内容: 是否有用于工作线程的类,类似于多处理模块的类? 我喜欢例如并行化地图功能的简单方法 但是,我希望这样做而不会产生新流程的开销。 我知道。但是,在我的用例中,该函数将是绑定的函数,python包装器将在实际函数调用之前为其释放。 我必须编写自己的线程池吗? 问题答案: 我刚刚发现模块中实际上 有一个基于线程的Pool接口,但是它有些隐藏并且没有正确记录。 可以通过导入 它是使用包装Pyt

  • 接收到数据时回调此函数,发生在worker进程中。函数原型: function onReceive(swoole_server $server, int $fd, int $reactor_id, string $data); $server,swoole_server对象 $fd,TCP客户端连接的唯一标识符 $reactor_id,TCP连接所在的Reactor线程ID $data,收到的数

  • 主要内容:一、MySql中的线程,二、主要方式,三、源码流程,四、总结一、MySql中的线程 在mysql中,每一个连接上来,就会分配给一个相关的THD数据类。在前面的分析中可以看到,连接器(Connectors)连接到的直接就是连接池,在连接池的线程处理中分为三部分,即一对一(一个连接对应一个线程),多对一(多个连接对应一个线程)和线程池(多对多)。 线程池和线程可以针对不同的具体场景来处理具体的事务,这样既兼顾了效率又提高了适应性,对于新手来说,这就是设计的一个

  • 我想创建一个简单的IntegrationFlow与Spring集成,我有困难。 我想创建一个集成流,从Rabbit Mq中的多个队列中获取消息,并将消息发布到不同的Restendpoint。 我想知道我是否可以并行化这个。 我想检查两个场景的可行性: 首先,我想为每个RabbitMq队列创建一个线程,该队列在接收到消息后将侦听并执行流: 场景1 第二个场景:在这个场景中,我想为每个队列创建一个动态