一、線程的【5種】狀態:NEW/RUNNABLE/RUNNING/BLOCKED/TERMINATED編程
二、建立對象的三種方式:多線程
1)實現Runnable的接口併發
2) 繼承Thread類線程
3)calleble和Future結合(實現業務拆分多線程的合併)對象
三、如何運行一個線程:繼承
start/notify/notifyall接口
如何關閉一個線程資源
stop(不推薦了)/interrupt中斷信號/volatile修飾標誌位!同步
二、關鍵字和API:it
yield方法是的RUNNING進入RUNNABLE的狀態:但不是blocke狀態,僅能使一個線程從運行狀態轉到可運行狀態,而不是等待或阻塞狀態.
start/notify/notifyAll/獲取鎖資源.使得進入RUNNABLE狀態,等待CPU資源的到來!
Thread方法的sleep/Object的wait方法進入了BLOCKED狀態
線程獲取了CPU資源以後進入RUNNING狀態
stop可使線程進入TERMINATED可是不推薦!
join方法讓兩個線程能夠串行,Bjoin到A中,B先阻塞,保證B線程在A線程以後執行!!能夠把多個線程串聯起來合併相似於 「串行」 編程方式!
三、爲何不推薦使用stop方法讓線程進入TERMINATED了,有沒有更優雅的方式停掉一個線程?
Two-Phase Termination(兩步終止)的模式能夠優雅的終止線程,這種模式採用了兩個步驟來終止線程,因此叫兩步終止模式
四、wait和sleep的區別
1.wait是Object的方法,線程執行此方法以後,會釋放對象鎖
2.sleep是Thread對象的方法,執行後,線程睡眠,但不會釋放對象鎖!!
五、鎖的幾個關鍵字
1)synchronized:同步方法和代碼塊,獲取了與mutex關聯的monitor鎖(monitor enter + moniter exit)!
2)volatile:輕量級鎖!只能修飾變量和實例變量!其實不能叫鎖,他只是保證多線程共享變量(static)的修改可以當即體現!保證線程的可見性!
3)顯示LOCK鎖!:能夠知道鎖的時間長短!
鎖的分類:
悲觀鎖:悲觀鎖認爲對於同一個數據的併發操做,必定會發生修改的,哪怕沒有修改,也會認爲修改。所以對同一個數據的併發操做,悲觀鎖採起加鎖的形式。
樂觀鎖:樂觀的認爲,不加鎖的併發操做是沒有事情的。
排它鎖:本身可讀寫、其餘人讀寫都不行: lock in share mode
共享鎖:本身可讀寫,其餘人只能夠讀!...for update
六、併發編程的三個重要特性:原子性、可見性、有序性!