2、多個線程多個鎖

  • 多個線程情況下,每個線程都可以拿到自己指定的鎖,分別獲得鎖之后,執(zhí)行synchronized方法體的內(nèi)容。
  • 關(guān)鍵字synchronized取得的鎖都是對象鎖,而不是把一段代碼(方法)當(dāng)做鎖,所以下面示例代碼中哪個線程先執(zhí)行synchronized關(guān)鍵字的方法,哪個線程就持有該方法所屬對象的鎖(Lock),兩個對象,線程獲得的就是兩個不同的鎖,他們互不影響。
  • 有一種情況是相同的鎖,即在靜態(tài)方法上加synchronized關(guān)鍵字,表示鎖定.class類,類一級別的鎖(獨占.class類)
public class MultiThread {
    private int num = 0;
    /** static */
    public synchronized void printNum(String tag){
        try {
            if(tag.equals("a")){
                num = 100;
                System.out.println("tag a, set num over!");
                Thread.sleep(3000);
            } else {
                num = 200;
                System.out.println("tag b, set num over!");
            }
            System.out.println("tag " + tag + ", num = " + num);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    //注意觀察run方法輸出順序
    public static void main(String[] args) {
        //倆個不同的對象
        final MultiThread m1 = new MultiThread();
        final MultiThread m2 = new MultiThread();

        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                m1.printNum("a");
            }
        });

        Thread t2 = new Thread(new Runnable() {
            @Override 
            public void run() {
                m2.printNum("b");
            }
        });        

        t1.start();
        t2.start();
    }
}

打印結(jié)果:
tag b, set num over!
tag a, set num over!
tag b, num = 200
tag a, num = 100
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Java多線程學(xué)習(xí) [-] 一擴展javalangThread類 二實現(xiàn)javalangRunnable接口 三T...
    影馳閱讀 3,115評論 1 18
  • 本文主要講了java中多線程的使用方法、線程同步、線程數(shù)據(jù)傳遞、線程狀態(tài)及相應(yīng)的一些線程函數(shù)用法、概述等。 首先講...
    李欣陽閱讀 2,602評論 1 15
  • 整理來自互聯(lián)網(wǎng) 1,JDK:Java Development Kit,java的開發(fā)和運行環(huán)境,java的開發(fā)工具...
    Ncompass閱讀 1,624評論 0 6
  • 一:java概述: 1,JDK:Java Development Kit,java的開發(fā)和運行環(huán)境,java的開發(fā)...
    慕容小偉閱讀 1,956評論 0 10
  • 一:java概述:1,JDK:Java Development Kit,java的開發(fā)和運行環(huán)境,java的開發(fā)工...
    ZaneInTheSun閱讀 2,818評論 0 11

友情鏈接更多精彩內(nèi)容