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