gpt4 book ai didi

java - java multithreading-等待空闲线程的可用性以创建和分配下一个任务

转载 作者:行者123 更新时间:2023-12-03 12:54:08 25 4
gpt4 key购买 nike

寻找一种解决多线程问题的方法。
我有N个任务(例如100)。我需要使用有限数量的线程(例如4)来运行这100个任务。任务规模巨大,因此我不想一起创建所有任务。仅当池中有可用线程时,才会创建每个任务。 推荐的相同解决方案。

最佳答案

您可以使用BlockingQueue定义任务。让一个线程创建任务,然后使用 put 将它们添加到队列中,直到队列中没有空间为止。然后让每个工作线程仅将下一个任务从队列中拉出。队列的阻塞性质基本上会迫使第一个线程(即定义任务)不会在工作线程之前走得太远。

这实际上只是producer-consumer pattern的一种情况,其中生产和消费的东西是进行某些工作的请求。

完成所有工作后,您需要指定某种方式使整个过程完成。一种方法是在生成线程创建所有任务后,将N个“毒药”放入队列。这些是特殊的任务,仅告诉工作线程退出(而不是做一些工作然后要求下一个项目)。由于每个线程最多只能读取一个毒药(因为它在读取毒药后会退出),并且将N个毒药放入队列中,因此,您将确保N个线程中的每一个都只能看到一个毒药。

请注意,如果任务生成线程消耗了资源(例如从数据库中读取任务的连接),则这些资源将一直保留到生成所有任务为止-这可能要花一些时间!通常这不是一个好主意,因此在这种情况下,这种方法也不是一个好方法。

关于java - java multithreading-等待空闲线程的可用性以创建和分配下一个任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54559862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com