最近,我一直致力于将并发对象部署到多核上。在示例中,我使用BlockingQueue.take()
方法,其规范提到它是阻止。这意味着该方法不会释放封闭线程的资源,以便可以将其重用于其他并发任务。这很有用,因为JVM实例中的活动线程总数是有限的,如果应用程序需要数千个活动线程,那么能够重新使用挂起的线程至关重要。另一方面,JVM使用从应用程序级线程到Java级操作系统级线程的1:1映射;即每个Java Thread实例都成为底层OS级别的线程。
当前的解决方案基于Java 1.5+中的java.util.concurrency
。尽管如此,我们仍然需要可扩展到大量工作线程的工作线程。现在,我有兴趣找到以下答案:
java.lang.Thread
的实现,以便我可以插入自己的Thread实现? 我还发现this讨论了JVM的不同实现,我不确定它们是否能提供帮助。
提前感谢您的意见和想法。
答案 0 :(得分:1)
如果要创建数千个线程,那么你做错了。
相反,请考虑使用Executor框架。 (从Executors
和ThreadPoolExecutor
类开始。)它们允许您排队数千个任务,同时拥有一个合理数量的线程来处理它们。
我猜这种方法就是你用“库替换经典线程”的意思。我强烈建议你研究执行者。
一个警告:默认情况下,执行程序使用非守护程序线程。因此,您必须在完成后关闭执行程序。你可以在程序退出时执行此操作,如果有一种退出程序的正常方法,而不仅仅是等待所有线程完成。 : - )