教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

Java中Synchronized了解嗎,其原理是什么?

更新時(shí)間:2023年04月04日10時(shí)05分 來(lái)源:傳智教育 瀏覽次數(shù):

好口碑IT培訓(xùn)

  Synchronized,它是Java中的一種關(guān)鍵字,可以用來(lái)控制對(duì)共享資源的并發(fā)訪問(wèn)。它的原理是基于Java中的鎖機(jī)制來(lái)實(shí)現(xiàn)的,當(dāng)一個(gè)線程獲取了一個(gè)對(duì)象的鎖后,其他線程就必須等待該線程釋放鎖之后才能獲取鎖并訪問(wèn)共享資源。

  Synchronized的原理可以概括為以下幾點(diǎn):

  1.對(duì)于每個(gè)類和實(shí)例,都有一個(gè)與之關(guān)聯(lián)的鎖。

  2.當(dāng)一個(gè)線程要訪問(wèn)一個(gè)被Synchronized修飾的代碼塊時(shí),它必須先獲得該代碼塊所屬對(duì)象的鎖。

  3.如果該鎖已經(jīng)被其他線程獲得,則該線程進(jìn)入阻塞狀態(tài),直到該鎖被釋放。

  4.當(dāng)該線程獲得鎖后,它就可以執(zhí)行Synchronized修飾的代碼塊,并在執(zhí)行完畢后釋放鎖,其他線程就可以獲取該鎖并執(zhí)行Synchronized代碼塊。

Synchronized原理介紹及其特點(diǎn)

  下面是一個(gè)簡(jiǎn)單的示例代碼,演示了Synchronized的使用:

public class SynchronizedExample {
    private int count = 0;
    private Object lock = new Object();

    public void increment() {
        synchronized(lock) { // 對(duì)lock對(duì)象進(jìn)行加鎖
            count++;
        }
    }

    public int getCount() {
        synchronized(lock) { // 對(duì)lock對(duì)象進(jìn)行加鎖
            return count;
        }
    }
}

  在這個(gè)示例代碼中,使用了Synchronized來(lái)保證對(duì)共享變量count的并發(fā)訪問(wèn)的安全。當(dāng)一個(gè)線程調(diào)用increment方法時(shí),它必須先獲取lock對(duì)象的鎖才能執(zhí)行count++操作。其他線程如果想要執(zhí)行increment方法,則必須等待該線程釋放lock對(duì)象的鎖。同樣地,當(dāng)一個(gè)線程調(diào)用getCount方法時(shí),它也必須先獲取lock對(duì)象的鎖才能返回count的值。

0 分享到:
和我們?cè)诰€交談!