国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

Java多線(xiàn)程之synchronized關(guān)鍵字的使用

發(fā)布時(shí)間:2021-07-17 21:51 來(lái)源:腳本之家 閱讀:0 作者:Fe_lin 欄目: 編程語(yǔ)言 歡迎投稿:712375056

目錄

一、使用在非靜態(tài)方法上

public synchronized void syzDemo(){
   System.out.println(System.currentTimeMillis());
    System.out.println("進(jìn)入synchronized鎖:syzDemo");
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

二、使用在靜態(tài)方法上

public synchronized static void syzDemo1(){
    System.out.println(System.currentTimeMillis());
    System.out.println("進(jìn)入synchronized鎖:syzDemo1");
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

三、使用在代碼塊上

public synchronized  void syzDemo2(){
    synchronized (this){
        System.out.println(System.currentTimeMillis());
        System.out.println("進(jìn)入synchronized鎖:syzDemo2");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
public synchronized  void syzDemo3(){
   synchronized (ExcelUtil.class){
       System.out.println(System.currentTimeMillis());
       System.out.println("進(jìn)入synchronized鎖:syzDemo3");
       try {
           Thread.sleep(1000);
       } catch (InterruptedException e) {
           e.printStackTrace();
       }
   }
}

四、三種方式的區別

public static void main(String[] args) {
        SyzDemo syzDemo = new SyzDemo();
        SyzDemo syzDemo1 = new SyzDemo();
        Thread thread = new Thread(()->{
            syzDemo.syzDemo();
        });
        thread.start();
        Thread thread1 = new Thread(()->{
            syzDemo1.syzDemo();
        });
        thread1.start();
    }

4.1 不會(huì )互斥

public static void main(String[] args) {
        SyzDemo syzDemo = new SyzDemo();
        SyzDemo syzDemo1 = new SyzDemo();
        Thread thread = new Thread(()->{
            syzDemo.syzDemo();
        });
        thread.start();
        Thread thread1 = new Thread(()->{
            syzDemo.syzDemo();
        });
        thread1.start();
    }

4.2 互斥

public static void main(String[] args) {
        SyzDemo syzDemo = new SyzDemo();
        SyzDemo syzDemo1 = new SyzDemo();
        Thread thread = new Thread(()->{
            syzDemo.syzDemo1();
        });
        thread.start();
        Thread thread1 = new Thread(()->{
            syzDemo1.syzDemo1();
        });
        thread1.start();
    }

解析:

在圖1中thread1和thread分別調用syzDemo和syzDemo1對象中的syzDemo方法,因為兩個(gè)線(xiàn)程調用是不同的對象的兩個(gè)方法,所以不會(huì )互斥

在圖2中thread1和thread都在調用syzDemo對象中的syzDemo方法,因為syzDemo方法加了synchronized

在圖3中thread1和thread分別調用syzDemo和syzDemo1對象中的syzDemo1方法,但是因為syzDemo1方法屬于靜態(tài)方法,在類(lèi)加載時(shí)就會(huì )加載到方法區,所以本質(zhì)上兩個(gè)線(xiàn)程都在調用同一個(gè)方法,于是產(chǎn)生了互斥

syzDemo2中與syzDemo相同:鎖定的是當前實(shí)例的這一段代碼,只有多個(gè)線(xiàn)程中調用的是同一個(gè)實(shí)例且執行到這一段代碼時(shí)才會(huì )互斥,syzDemo3于syzDemo1相同:鎖定的是當前類(lèi)的這一段代碼,只要多個(gè)線(xiàn)程共同執行這一段代碼就會(huì )產(chǎn)生互斥

到此這篇關(guān)于Java多線(xiàn)程之synchronized關(guān)鍵字的使用的文章就介紹到這了,更多相關(guān)Java synchronized關(guān)鍵字內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

伊人久久大香线蕉AV色婷婷色| 又湿又紧又大又爽A视频国产| 国产超碰人人模人人爽人人添| 国产人成高清在线视频99| 久久婷婷五月综合97色| 人妻另类 专区 欧美 制服|