gpt4 book ai didi

java - 操纵 JVM 中的线程实现

转载 作者:太空宇宙 更新时间:2023-11-04 08:34:10 24 4
gpt4 key购买 nike

最近,我一直致力于将并发对象部署到多核上。在示例中,我使用 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 框架。 (从 ExecutorsThreadPoolExecutor 类开始。)它们允许您对数千个任务进行排队,同时让数量合理的线程处理它们。

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

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

关于java - 操纵 JVM 中的线程实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6768667/

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