Java中的鎖機(jī)制是保證線程并發(fā)運(yùn)行的重要機(jī)制,它可以保證在多線程訪問同一資源的過程中不會(huì)出現(xiàn)數(shù)據(jù)混亂和崩潰的問題。
Java的鎖機(jī)制主要分為兩種,一種是私有鎖,另一種是內(nèi)置鎖。下面我們?cè)敿?xì)探討一下這兩種鎖機(jī)制的使用方式和區(qū)別。
// 私有鎖的使用方式 public class PrivateLock { private final Object lockObj = new Object(); public void doSomething() { synchronized (lockObj) { // 做一些操作 } } } // 內(nèi)置鎖的使用方式 public class IntrinsicLock { private int count = 0; public synchronized void doSomething() { // 做一些操作 count++; } }
從上面的代碼可以看出,在使用私有鎖的代碼塊中,需要使用 synchronized 關(guān)鍵字來聲明代碼塊,在代碼塊內(nèi)部再聲明一個(gè) Object 對(duì)象作為鎖。而在使用內(nèi)置鎖的示例中,直接在方法前使用 synchronized 關(guān)鍵字即可。
總體上來說,內(nèi)置鎖使用起來比較方便,但是一旦某一段代碼被加鎖后,其他線程就無法同時(shí)訪問,這就可能導(dǎo)致性能問題。而私有鎖則可以針對(duì)個(gè)別對(duì)象或者資源進(jìn)行鎖定,不會(huì)影響到其他線程的訪問,因此可以提升程序的性能。
在實(shí)際程序開發(fā)中,需要根據(jù)情況選擇使用哪種鎖機(jī)制,以達(dá)到最優(yōu)的并發(fā)效果。