大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

Java多線程編程概述
Java多線程的安全問題
Java多線程同步
Java多線程間的通信
Java線程Lock
Java多線程管理
保障線程安全的設計技術
Java鎖的優化及注意事項
Java多線程集合
【Java多線程】單例模式與多線程

Java多線程同步代碼塊Synchronized

Java中的每個對象都有一個與之關聯的內部鎖(Intrinsic lock). 這種鎖也稱為監視器(Monitor), 這種內部鎖是一種排他鎖,可以保障原子性,可見性與有序性。

內部鎖是通過synchronized關鍵字實現的.synchronized關鍵字修飾代碼塊,修飾該方法。

修飾代碼塊的語法:

synchronized( 對象鎖 ) {
   同步代碼塊,可以在同步代碼塊中訪問共享數據
}

修飾實例方法就稱為同步實例方法

修飾靜態方法稱稱為同步靜態方法

synchronized同步代碼塊

package com.wkcto.intrinsiclock;

/**
 * synchronized同步代碼塊
 *  this鎖對象
 * Author: 老崔
 */
public class Test01 {
    public static void main(String[] args) {
        //創建兩個線程,分別調用mm()方法
        //先創建Test01對象,通過對象名調用mm()方法
        Test01 obj = new Test01();

        new Thread(new Runnable() {
            @Override
            public void run() {
                obj.mm();       //使用的鎖對象this就是obj對象
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                obj.mm();       //使用的鎖對象this也是obj對象
            }
        }).start();

    }

    //定義方法,打印100行字符串
    public void mm(){
        synchronized ( this ) {     //經常使用this當前對象作為鎖對象
            for (int i = 1; i <= 100; i++) {
                System.out.println(Thread.currentThread().getName() + " --> " + i);
            }
        }
    }
}
package com.wkcto.intrinsiclock;

/**
 * synchronized同步代碼塊
 *  如果線程的鎖不同, 不能實現同步
 *  想要同步必須使用同一個鎖對象
 * Author: 老崔
 */
public class Test02 {
    public static void main(String[] args) {
        //創建兩個線程,分別調用mm()方法
        //先創建Test01對象,通過對象名調用mm()方法
        Test02 obj = new Test02();
        Test02 obj2 = new Test02();

        new Thread(new Runnable() {
            @Override
            public void run() {
                obj.mm();       //使用的鎖對象this就是obj對象
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                obj2.mm();       //使用的鎖對象this也是obj2對象
            }
        }).start();

    }

    //定義方法,打印100行字符串
    public void mm(){
        synchronized ( this ) {     //經常使用this當前對象作為鎖對象
            for (int i = 1; i <= 100; i++) {
                System.out.println(Thread.currentThread().getName() + " --> " + i);
            }
        }
    }
}
package com.wkcto.intrinsiclock;

/**
 * synchronized同步代碼塊
 * 使用一個常量對象作為鎖對象
 * Author: 老崔
 */
public class Test03 {
    public static void main(String[] args) {
        //創建兩個線程,分別調用mm()方法
        //先創建Test01對象,通過對象名調用mm()方法
        Test03 obj = new Test03();
        Test03 obj2 = new Test03();

        new Thread(new Runnable() {
            @Override
            public void run() {
                obj.mm();       //使用的鎖對象OBJ常量
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                obj2.mm();       //使用的鎖對象OBJ常量
            }
        }).start();

    }

    public static final  Object OBJ = new Object();     //定義一個常量,
    //定義方法,打印100行字符串
    public void mm(){
        synchronized ( OBJ ) {     //使用一個常量對象作為鎖對象
            for (int i = 1; i <= 100; i++) {
                System.out.println(Thread.currentThread().getName() + " --> " + i);
            }
        }
    }
}
package com.wkcto.intrinsiclock;

/**
 * synchronized同步代碼塊
 * 使用一個常量對象作為鎖對象,不同方法中 的同步代碼塊也可以同步
 * Author: 老崔
 */
public class Test04 {
    public static void main(String[] args) {
        //創建兩個線程,分別調用mm()方法
        //先創建Test01對象,通過對象名調用mm()方法
        Test04 obj = new Test04();
        Test04 obj2 = new Test04();

        new Thread(new Runnable() {
            @Override
            public void run() {
                obj.mm();       //使用的鎖對象OBJ常量
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                obj2.mm();       //使用的鎖對象OBJ常量
            }
        }).start();

        //第三個線程調用靜態方法
        new Thread(new Runnable() {
            @Override
            public void run() {
                sm();       //使用的鎖對象OBJ常量
            }
        }).start();

    }

    public static final  Object OBJ = new Object();     //定義一個常量,
    //定義方法,打印100行字符串
    public void mm(){
        synchronized ( OBJ ) {     //使用一個常量對象作為鎖對象
            for (int i = 1; i <= 100; i++) {
                System.out.println(Thread.currentThread().getName() + " --> " + i);
            }
        }
    }

    //定義方法,打印100行字符串
    public static void sm(){
        synchronized ( OBJ ) {     //使用一個常量對象作為鎖對象
            for (int i = 1; i <= 100; i++) {
                System.out.println(Thread.currentThread().getName() + " --> " + i);
            }
        }
    }
}

 

全部教程
主站蜘蛛池模板: 天天操网站 | 爱爱视频网站免费 | 精品国产免费久久久久久 | 国产中文字幕在线免费观看 | 国产成人v片视频在线观看 国产成人爱片免费观看视频 | 国内精品不卡一区二区三区 | 91在线播放免费不卡无毒 | 国产福利免费在线观看 | 日日碰日日操 | 99热国产在线 | 国产极品精频在线观看 | 欧美亚洲国产色综合 | 日本精品久久久一区二区三区 | 日本不卡在线播放 | 毛片欧美 | 欧美成人亚洲高清在线观看 | 亚洲国产午夜精品理论片的软件 | 男人女人真曰批的视频动态 | 久久99精品久久久久久国产越南 | 性生活视频网址 | 天天爱天天干天天操 | 亚洲欧美日韩国产一区二区精品 | free性欧美极度另类超级大 | 国产一区二区视频在线播放 | 日韩欧美中文 | 亚洲国产成人综合精品2020 | 欧美男女性生活视频 | 99久热这里只有精品免费 | 亚洲一区二区中文 | 欧美日本一本线在线观看 | 欧美肥老妇做爰视频 | 老司机午夜免费影院 | 国产精品美女自在线观看免费 | 中文字幕亚洲综合久久男男 | 中文国产欧美在线观看 | 一区二区三区在线播放视频 | 天天拍夜夜添久久精品中文 | 国产在视频线精品www666 | 波多野吉衣一区二区三区在线观看 | 97视频精品全国在线观看 | 91久久老司机福利精品网 |