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