多執行緒詳解
◆說起程序,就不得不說下程式。程式是指令和資料的有序集合,其本身沒有任何執行的含義,是乙個靜態的概念。◆而程序則是執行程式的一-次執行過程,它是乙個動態的概念。 是系統資源分配的單位◆通常在乙個程序中可以包含若干個執行緒,當然乙個程序中至少有一 個執行緒,不然沒有存在的意義。執行緒是cpu排程和執行的的單位。
注意:很多多執行緒是模擬出來的,真正的多執行緒是指有多個cpu,即多核,如伺服器。如果是模擬出來的多執行緒,即在乙個cpu的情況下, 在同乙個時間點,cpu只能執行乙個**,因為切換的很快,所以就有同時執行的錯局。
本章核心概念◆執行緒就是獨立的執行路徑;◆在程式執行時,即使沒有自己建立執行緒,後台也會有多個執行緒,如主線程,gc執行緒;◆main()稱之為主線程,為系統的入口,用於執行整個程式;◆在一乙個程序中,如果開闢了多個執行緒,執行緒的執行由排程器安排排程,排程器是與作業系統緊密相關的,先後順序是不能人為的干預的。◆對同乙份資源操作時,會存在資源搶奪的問題,需要加入併發控制;◆執行緒會帶來額外的開銷,如cpu排程時間,併發控制開銷。◆每個執行緒在自己的工作記憶體互動,記憶體控制不當會造成資料不一致
◆自定義執行緒類繼承thread類◆重寫run()方法,編寫執行緒執行體◆建立執行緒物件,呼叫star()方法啟動執行緒
package com.shao.xiancheng;//建立執行緒方式一:繼承thread類,重寫run()方法,呼叫strart()開啟執行緒
//總結:注意,執行緒開啟不一定立即執行,由cpu排程執行
public class testthread1 extends thread }
public static void main(string args) }
}//結果:使用start執行緒是同步執行的,如果使用run,則是同在main方法裡順序執行
◆定義myrunnable類實現runnable介面◆實現run()方法,編寫執行緒執行體◆建立執行緒物件,呼叫start()方法啟動執行緒
package com.shao.xiancheng;public class testthread3 implements runnable }
public static void main(string args) }
}
龜兔賽跑
package com.shao.xiancheng;public class race implements runnable catch (interruptedexception e) }
//判斷比賽是否結束
boolean flag = gameover(i);
//如果比賽結束就停止程式
if (flag)
system.out.println(thread.currentthread().getname()+"-->跑了"+i+"步");}}
private boolean gameover(int steps)
}return false;}
public static void main(string args) }
1.實現callable介面,需要返回值型別2.重寫call方法,需要丟擲異常3.建立目標物件4.建立執行服務: executorservice ser = executors.newfixedthreadpool(1);5.提交執行: futureresult1 = ser. submit(t1);6.獲取結果: boolean r1 = result1.get()7.關閉服務: ser.shutdownnow();
多執行緒學習筆記 執行緒
thread類 常用屬性 currentthread 獲取當前正在執行的執行緒 isalive 指示當前執行緒的執行狀態 isbackground 指示是否為後台執行緒 isthreadpoolthread 指示是否屬於託管執行緒池 managedthreadid 獲取執行緒識別符號 name 獲取...
多執行緒學習筆記
多執行緒的相關概念 什麼是程序?當乙個程式開始執行時,它就是乙個程序,程序包括執行中的程式和程式所使用到的記憶體和系統資源。而乙個程序又是由多個執行緒所組成的。什麼是執行緒?執行緒是程式中的乙個執行流,每個執行緒都有自己的專有暫存器 棧指標 程式計數器等 但 區是共享的,即不同的執行緒可以執行同樣的...
多執行緒學習筆記
多執行緒是實現多工的一種方式,多個程序多個執行緒。建立執行緒 1.繼承thread類 子類覆蓋父類中的run方法,將執行緒執行的 存放在run中。2.建立子類物件的同時執行緒也被建立。3.通過呼叫start方法開啟執行緒。執行緒的各種狀態 1.建立狀態 在程式中用構造方法建立了乙個執行緒物件後,新的...