2010-05-19 56 views
8

我需要從另一個Java應用程序單獨的JVM調用.jar文件,它非常耗費CPU,所以它應該與後臺優先級運行,以不影響其餘的系統。有沒有跨平臺的方法來做到這一點?跨平臺的方式來改變java進程優先

+0

在*「寫入一次,隨處運行」*跨平臺感,否。但是在每個Un * x(包括OS X)和每臺Windows機器上製作一小段不可移植的代碼實際上並不難。 +1給Stephen C的回答。 – SyntaxT3rr0r 2010-05-19 15:03:40

回答

3

簡單的答案是,沒有可移植的方式來改變Java中Process的優先級。 (Threads - yes,Processes - no。)

如果您的Java應用程序需要啓動一個新的JVM來運行CPU密集型應用程序,那麼很可能它已經不是完全可移植的。例如,您通常需要提供java命令(或等效命令),-cp參數(或等效參數),系統特定的JVM選項等的路徑名。因此,假設啓動JVM的命令是已經是非可移植的,那麼使用包含特定操作系統的東西來更改啓動的進程的優先級的包裝腳本來替換命令應該不會有問題。 (例如,對於UNIX或Linux,您可以簡單地使用nice來啓動JVM。)

1

我不知道如何設置外部進程的優先級。然而ThreadsetPriority方法,所以如果你控制的目標應用程序,你也許可以增加一個開關,告訴應用程序到自己的優先級設置爲最低:

theThread.setPriority(Thread.MIN_PRIORITY);

如果仍然影響系統,我建議你交錯一些簡短的sleep ing來卸載CPU。


另一種選擇:

如果你把目標.jar在「啓動」應用程序的classpath,你可以簡單地調用一個新創建的線程的jar文件的main - 方法,然後使用上述方法設置優先級。 (即使你不控制目標jar文件的源代碼,這也應該起作用。)

+1

我明白他需要產卵另一個過程,這種方法是針對一個線程,所以我不認爲它可以工作... – Persimmonium 2010-05-19 14:28:33

+0

哦..嗯..好點。我想這隻有有意義,如果有可能添加一個開關到正在執行的程序。 – aioobe 2010-05-19 14:40:42

+0

如果他有其他正在運行的進程的源,它可以將自己設置爲MIN_PRIORITY,對不對? – 2010-05-19 14:47:43