1

最近,我一直致力于将并发对象部署到多核上。在一个示例中,我使用了BlockingQueue.take()方法,其规范中提到它是阻塞的。这意味着该方法不会释放封闭线程的资源,以便可以将其重新用于其他并发任务。这很有用,因为 JVM 实例中的活动线程总数是有限的,如果应用程序需要数千个活动线程,那么能够重用挂起的线程至关重要。另一方面,JVM 在 Java 中使用从应用程序级线程到操作系统级线程的 1:1 映射;即每个Java Thread 实例都成为一个底层操作系统级线程。

当前的解决方案基于java.util.concurrencyJava 1.5+。尽管如此,我们仍需要可扩展到大量的工作线程。现在,我有兴趣找到以下答案:

  • 有什么方法可以替换java.lang.ThreadJVM 中的实现,以便我可以插入自己的 Thread 实现?
  • 这是否只能通过调整 JVM 中线程实现的 C++ 部分并重新编译来实现?
  • 是否有任何库可以提供一种方法来替换 Java 中的经典线程?
  • 同样,在同一行中,是否有一个库或一种方法来指导Java 中的某些线程如何映射到操作系统级别的一个线程?

我还发现讨论了 JVM 的不同实现,我不确定它们是否有帮助。

提前感谢您的意见和想法。

4

1 回答 1

1

如果您正在创建数千个线程,那么您做错了。

相反,请考虑使用 Executor 框架。(从ExecutorsThreadPoolExecutor类开始。)它们允许您将数千个任务排队,同时有合理数量的线程处理它们。

我想这种方法就是您所说的“用库替换经典线程”的意思。我强烈建议您调查执行者。

一个警告:默认情况下,执行程序使用非守护线程。因此,您必须在完成后关闭执行程序。您可以在程序退出时执行此操作,如果有一种正常的方式可以退出您的程序,而不仅仅是等待所有线程完成。:-)

于 2011-07-20T21:20:18.593 回答