1

我想运行一个使用 Thread 类的 Java 程序,这样每个 Thread.run() 都会导致运行一个正确的内核线程。有没有办法通过将一些命令行参数传递给 Java VM 来实现这一点?我在 Windows 机器上使用 Java 1.5 SDK(和 jre1.5.0_18)运行 Eclipse。我尝试使用 -XX:+UseBoundThreads,但任务管理器似乎在同一个内核上运行两个线程(我使用的是双核机器)(另一个内核空闲)。

谢谢。

4

4 回答 4

6

我想运行一个使用 Thread 类的 Java 程序,这样每个 Thread.run() 都会导致运行一个正确的内核线程。

如果您调用Thread.run(),则根本不会创建单独的线程,而是在主线程中按顺序执行所有内容。你要做的是调用Thread.start(),它将创建一个新线程并让它执行Thread.run()

于 2009-07-13T09:22:55.203 回答
2

Windows JVM 始终使用本机线程。但是,由内核决定在哪个内核上运行每个线程。绝对不能保证启动两个线程将在 2 个内核之间共享。

顺便说一句,我认为 UseBoundThreads 选项仅适用于 solaris,但我对此不太确定。

于 2009-07-13T09:20:05.787 回答
1

您可以附加 jvisualvm 以查看哪些线程正在运行以及它们使用了多少 CPU。

于 2009-07-13T10:33:20.240 回答
0

谢谢大家..虽然我不知道正确的答案,但目前,Eclipse 中的 Java 1.6 给我的双核性能几乎是我正在查看的代码库的两倍......此外,jvisualvm 的效果很好探查器..谢谢!

于 2009-07-20T09:49:03.960 回答