gpt4 book ai didi

Java线程队列

转载 作者:行者123 更新时间:2023-12-01 17:07:01 25 4
gpt4 key购买 nike

我们有一个应用程序,它处理项目,并在每次迭代时启动一个线程来对其他数据库进行更新 - 其他线程上发生的事情并不非常重要,这是一个非常简单的更新。

我们的初衷是(通过使用线程)确保主处理不会因初始化与另一个数据库的连接并运行更新而被阻止。

昨天,我们遇到了一个问题(由于未知的原因)数据库速度变慢并且并行线程数量激增,导致该数据库中有 1000 多个连接。所以我们意识到我们需要对线程有更多的控制。

我需要我们的软件的库或工具,它可以:

1) 将线程/作业/任务(任何东西 - 如果需要的话我们可以重写代码,我们现在有 Thread 对象)到类似系统的队列中2)我们可以定义最多同时运行多少个线程3) 线程完成后,该线程将从队列中删除,以便 GC 可以删除涉及的所有实体。

我做了相当多的阅读,我发现了 ExecutorService (Executors.newFixedThreadPool(5);) 但可能的问题是它失败了 3) 因为根据 javadocs:

The threads in the pool will exist until it is explicitly shutdown.

我认为,这意味着如果应用程序不断添加线程,则线程将一直存在,直到应用程序重新启动为止(或者如果我关闭并重新实例化 ExecutorService,但这对我来说似乎是一种黑客攻击)。

我认为 Executors.newFixedThreadPool(5) 未能满足我的 3) 要求是否正确?我真的从好的结局中得到了问题吗?我需要线程还是其他东西?

最佳答案

你害怕的一句话:

The threads in the pool will exist until it is explicitly shutdown

仅描述对 Executors.newFixedThreadPool() 的调用。要更好地控制线程池行为,请使用 ThreadPoolExecutor constructor明确地,例如

new ThreadPoolExecutor(1, //minimal Pool Size,
10, // maximal Pool Size,
30, TimeUnit.SECONDS // idle thread dies in 30 seconds
new ArrayBlockingQueue<Runnable>())

关于Java线程队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25118755/

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