java 線程狀態(tài) Java實現(xiàn)線程同步的幾種方式?
Java實現(xiàn)線程同步的幾種方式?(1)同步方法:即有synchronized關(guān)鍵字修飾的方法。 由于java的每個對象都有一個內(nèi)置鎖,當(dāng)用此關(guān)鍵字修飾方法時,內(nèi)置鎖會保護整個方法。在調(diào)用該方法前,需要
Java實現(xiàn)線程同步的幾種方式?
(1)同步方法:即有synchronized關(guān)鍵字修飾的方法。 由于java的每個對象都有一個內(nèi)置鎖,當(dāng)用此關(guān)鍵字修飾方法時,內(nèi)置鎖會保護整個方法。在調(diào)用該方法前,需要獲得內(nèi)置鎖,否則就處于阻塞狀態(tài)。(2)同步代碼塊即有synchronized關(guān)鍵字修飾的語句塊。被該關(guān)鍵字修飾的語句塊會自動被加上內(nèi)置鎖,從而實現(xiàn)同步(3)使用特殊域變量(Volatile)實現(xiàn)線程同步a.volatile關(guān)鍵字為域變量的訪問提供了一種免鎖機制b.使用volatile修飾域相當(dāng)于告訴虛擬機該域可能會被其他線程更新c.因此每次使用該域就要重新計算,而不是使用寄存器中的值d.volatile不會提供任何原子操作,它也不能用來修飾final類型的變量(4)使用重入鎖實現(xiàn)線程同步在JavaSE5.0中新增了一個java.util.concurrent包來支持同步。ReentrantLock類是可重入、互斥、實現(xiàn)了Lock接口的鎖, 它與使用synchronized方法和快具有相同的基本行為和語義,并且擴展了其能力。(5)使用局部變量實現(xiàn)線程同步