我試圖想象如果我的機器如果使用雙核處理器,它將如何處理這些代碼。如果它是四核機器,它會如何表現?我有一個雙核心機器。在java中,我的電腦如何管理3個線程的FixedThreadPool?什麼是jvm的可能行爲?
ExecutorService executor = Executors.newFixedThreadPool(3);
// Submission of tasks
for (int i =0; i<10; i++){
executor.submit(new Processor(i));
}
處理器有一個run方法上打印「在線程中運行:約睡覺......」 然後睡5秒,然後打印「在線程中運行:醒了......」
我試圖連接java代碼和硬件之間的點。我很難想象這在不同的處理器環境中有何不同。在這種情況下,有人能舉出一個jvm可能行爲的例子嗎?先謝謝你。
答案是要在你正在運行的操作系統某種程度上取決於。也許[ThreadPoolExecutor](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ThreadPoolExecutor.html)類的Javadoc可能會幫助您確定發生了什麼。 –
我會說這裏唯一的限制是線程的數量,因爲你的'處理器'大部分是空閒的。所以,我不指望它在兩個內核或64個內核中表現不同。最後,你的3個首要任務將會啓動,而其他3個任務將排隊,並且每隔5秒鐘,3個當前任務將結束,另外3個任務將開始。它們的調度順序可能有所不同,但主要取決於線程的JVM/OS管理。 – SJuan76
在Java代碼和硬件之間是執行大量任務調度的操作系統 - 我找到了一篇[帶有圖片的文章](http://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/4_Threads.html )。 – vanOekel