一、線程進程介紹:javascript
程序:指令和數據的有序集合,靜態概念; java
進程:執行程序的一次執行過程,一個動態概念,是系統資源分配的單位;spa
線程:cpu調度和執行的過程,是獨立的執行路徑。線程
他們之間的關係:一個進程能夠包含多個線程,至少一個線程。3d
二、建立線程:code
A、繼承Thread類,重寫run()方法;對象
B、實現Runnable接口,實現run()方法;blog
C、實現Callable接口繼承
三、線程狀態接口
大體過程:new一個Thread後線程對象進入了新生狀態,當調用start()方法後,線程當即進入了就緒狀態,可是並非必定當即調度執行;調度後進入了運行狀態,這時候線程才執行線程內的代碼;當運行時調用sleep、wait或同步的鎖定時,線程就進入了阻塞狀態,只有當阻塞事件解除後從新進入就緒狀態等着cpu調度執行。完成全部代碼後或者中斷那麼線程進入死亡狀態,沒法再次啓動此死亡線程。
Java線程的狀態有如下幾種:
run()
方法的Java代碼;sleep()
方法正在計時等待;run()
方法執行完畢。四、中斷線程
A、
B、sleep會使當前線程阻塞;時間到達後進入就緒狀態。每個對象都有一個鎖,sleep不會釋放鎖。
C、Join會合併線程,插入後只有出入的線程執行完成後,纔會執行其餘線程,其餘線程會阻塞。
D、在run()中使用Thread.yield()會使線程執行到此刻禮讓,可是不阻塞只是暫停。此刻cpu從新調度,可是禮讓不必定成功,取決於cpu再次調度了誰。
五、守護線程
線程有用戶線程和守護線程。虛擬機確保用戶線程執行完畢,可是不用等待守護線程執行完畢。
在調用start()
方法前,調用setDaemon(true)
把該線程標記爲守護線程:
Thread t = new MyThread(); t.setDaemon(true); t.start();
六、線程優先級
七、線程同步
有兩種此關鍵字用法。
A、synchronized方法
在方法加此關鍵字
B、synchronize塊
比較:
八、lock
九、線程通訊
生產者消費者問題