2012-12-20 125 views
1

我們在JAVA中有一個多線程應用程序,它有多個並行運行的線程。現在我們想要在單個內核上運行所有這些線程。目前應用程序正在具有多於一個Cores的系統上運行。在一個CPU上運行Java線程

我們知道有.NET Framework中的技術可用ProcesAffinity設置進程關聯。

但我們不想依賴於.Net框架,因爲我們的應用是建立在Java。

難道我們使用.bat文件設置進程的親和力,並通過蝙蝠運行應用程序可執行的JAR文件的文件?

目前,我們的應用程序在Windows XP操作系統上運行。所以我們需要一個在XP平臺上工作良好的解決方案。

+1

可能重複:http://stackoverflow.com/questions/2255810/how-to-force-two-java-threads-to-run- on-same-processor-core –

+0

查看Peter Lawrey的[線程關聯](https://github.com/peter-lawrey/Java-Thread-Affinity)項目。 –

回答

4

編輯:

這是可能的:見Java thread affinity


純Java不支持運行在特定的處理器線程。檢查上面鏈接的SO問題。

+1

這是可能的:http://stackoverflow.com/a/6894925/540873 –

+0

@ThomasJungblut:謝謝。 – Azodious

+0

這允許您將密鑰線程限制/分配給核心上的特定內核或cpus,但不會重新分配JVM線程,例如。 GC線程。 –

1

就個人而言,我不認爲這樣的事實,這不能用純Java設置是一件壞事,因爲對我來說,一個應用程序的運行方式確實非常依賴於OS,等於是一個OS專用解決方案並不是一件壞事。

可以使用MS psexec實用程序設置的親和力:

psexec -a 1 java -jar myapplication.jar 

會指示所有被Java創建的線程將最低的CPU上運行。

而且這條線將是你的.bat文件...

+0

beny23再次爲Psexec我們需要.net框架來運行psecxec.exe文件 – KHALID