[英]Trouble understanding Java threads
抱歉,我從python了解了多處理的知識,在理解Java的方法時遇到了一些麻煩。 在python中,我可以說我想要一個由4個進程組成的池,然后向我的程序發送一堆工作,並且它一次可以處理4個項目。 我意識到,使用Java,我需要使用線程來完成相同的任務,到目前為止,它似乎真的工作得很好。
但是..我與python不同,我的cpu沒有獲得100%的利用率(它們大約為70-80%),並且我懷疑它是我創建線程的方式(python / java和程序是獨立的)。 在Java中,我不確定如何創建一個線程,因此我要為要處理的列表中的每個項目創建一個線程,如下所示:
for (int i = 0; i < 500; i++) {
Runnable task = new MyRunnable(10000000L + i);
Thread worker = new Thread(task);
// We can set the name of the thread
worker.setName(String.valueOf(i));
// Start the thread, never call method run() direct
worker.start();
// Remember the thread for later usage
threads.add(worker);
}
我從這里拿走的。 我的問題是這是啟動線程的正確方法,還是有辦法讓java本身來管理線程數,使其達到最佳狀態? 我和我猜想的每個人一樣,我希望我的代碼盡可能快地運行,並且我試圖理解如何分辨和解決可能由於創建過多線程而引起的任何問題。 這不是主要問題,只是對它在Java引擎下的工作方式感到好奇。
謝謝!
線程是“低級” API。
根據您要執行的操作以及所使用的Java版本,它們是更好的解決方案。 如果您使用Java 7,並且如果您的任務允許,則可以使用fork / join框架: http : //docs.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html
但是,請看一下Java並發教程: http : //docs.oracle.com/javase/tutorial/essential/concurrency/executors.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.