java - 操纵 JVM 中的线程实现

标签 java concurrency multicore concurrent-programming java.util.concurrent

最近,我一直致力于将并发对象部署到多核上。在示例中,我使用 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/

相关文章:

java - 有条件地定义同步块(synchronized block)

multithreading - XSLT 处理器可以是多线程的吗?

arm - 如何访问多核 ARM CPU 的程序计数器寄存器

java - 有没有一种特定的方法可以将父类(super class)的某些功能赋予某个子类?

java - 过滤器如何处理 session

java - 在java中创建对象,在编译时不知道类

concurrency - 函数式语言如何处理共享状态数据?

java - Android 网络服务 PHP MYSQL

java - 在 Java 中释放信号量对象的正确方法是什么?

c - 按核心跟踪线程执行