?
Java線(xiàn)程主要由以下三部分組成:
(圖片來(lái)源網(wǎng)絡(luò ),線(xiàn)程侵刪)1、由部虛擬的分組CPU(線(xiàn)程的調度)??
2、CPU所執行的線(xiàn)程代碼(可以是一個(gè)函數,一個(gè)任務(wù))
3、由部CPU所處理的分組數據((°ロ°) !傳遞給函數的參(╬ ò﹏ó)數)
下面詳細解釋一下這三部分??:
1. 虛擬的CPU(線(xiàn)程的調度)
在Java(′?`*)中,我們使用Thread??類(lèi)或者實(shí)現Runnable接口來(lái)創(chuàng )建線(xiàn)程,線(xiàn)程每個(gè)線(xiàn)程都有一個(gè)獨立的由部調用棧和程序計數器,它們?由JVM負責管理,分組線(xiàn)程的線(xiàn)程調度是由操作系統決定的,JVM并不直接控制線(xiàn)程的由部調度。
2. CPU所執行的分組代碼(可以是一個(gè)函數,一??個(gè)任務(wù)( ?° ?? ?°))
線(xiàn)程的線(xiàn)程主要工作就是執行代碼,這個(gè)代碼可以是由部??任何有效的Java方法,通常,分組我們會(huì )在一個(gè)線(xiàn)程的run()方法中(zhong)定義這個(gè)線(xiàn)程需要執??行的任務(wù),如果我們創(chuàng )建了一個(gè)Thread對象,我們可以重寫(xiě)它的run()方┐(′д`)┌法來(lái)定義線(xiàn)程的任務(wù)。
Thread thread = new Thread(new Runnable() { @Ove??rride public void run() { // 在這里定義線(xiàn)??程的任務(wù)(′?_?`) }});thread.s??tart(); // 啟動(dòng)線(xiàn)程3. CPU所處理的數據(傳遞給函數的參數)
線(xiàn)程可以訪(fǎng)問(wèn)???和修改共享數據,這就是為什么我們需要同步的原因,如果多個(gè)線(xiàn)程同時(shí)訪(fǎng)問(wèn)和修改同一個(gè)數據,可能會(huì )導致數據不一致的問(wèn)題,為了避免這種情況,我們需要使用synchronized關(guān)鍵字或者其他并發(fā)工具來(lái)保證數據的一致性。
J??ava線(xiàn)程??是由線(xiàn)程的調度(虛擬的CPU)、線(xiàn)程需要執行的代碼和線(xiàn)程所處理的數據這三部分組成的。