標籤:
線程:代碼執行的一個分支
主要作用是提高了效率,cpu能同時執行多個部分的代碼。
線程的建立:兩種方式
a.繼承於thread類,重寫run方法。
b.實現了runable介面,實現run方法。
啟動線程必須用線程的start方法;如果直接調用線程的run方法則就是單線程了。
有一個對象啟動兩個線程和兩個對象啟動兩個線程的區別:一個對象啟動兩個線程,兩個線程中的修改的內容始終是針對同一個對象的。兩個對象啟動
兩個線程,線程中修改的內容是針對不同的對象。
Thread類:部分方法
start() 使該線程開始執行;JAVA 虛擬機器調用該線程的 run 方法。
getPriority() 返回線程的優先順序。
setPriority(int newPriority) 更改線程的優先順序。
currentThread() 返回對當前正在執行的線程對象的引用。
setName(String name) 改變線程名稱,使之與參數 name 相同。
線程的狀態:
1.建立 : new一個線程後線程處於建立狀態
2.就緒 : 當一個線程調用了start方法之後 處於就緒狀態(注意太調用了此方法並不一定立刻去執行線程的方法)
3.運行 : 線程在執行的run方法的時候處於運行狀態
4.睡眠 : 線程調用了sleep方法之後處於休息狀態(此狀態當休息時間到了之後立刻就轉為就緒狀態)
5.等待 : 線程調用了wait方法之後處於等待狀態。
6.死亡 : run方法執行完畢。
等待狀態與睡眠時間狀態的區別:
睡眠狀態是時間到了自然處於就緒狀態,只有CPU分配了事件片,立刻就可以繼續執行。
等待狀態是如果沒有線程通知的話,等待狀態永遠醒不過來了.
常用方法:
a.currentTHread():靜態方法。擷取當前的線程。
b.getName():擷取線程的名字
c.setName():設定線程的名字(沒有設定則有預設的名字)
d.sleep():讓線程休息一段時間。
e.join():合并線程,讓兩個線程合并一個線程。
f.yeild():當前線程讓出cpu,當前線程處於一個就緒狀態
g.setPriority():設定線程的優先順序。預設的層級是5.優先順序從1~10;
線程的同步: 多個線程同時執行某段代碼就會出現線程同步。此時結果不可預料.
防止線程同步:採用synchronized關鍵字修飾需要進行同步的代碼。
synchronized的原理:是對資源加一把鎖,當一個線程進入此資源執行代碼的時候,立刻加鎖,其他的線程
執行處於等待狀態。一直到此線程釋放鎖後,其他線程才能進入此資源執行代碼。
學習java線程學習筆記