黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

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

Java多線程同步代碼塊Synchronized

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

內(nèi)部鎖是通過synchronized關(guān)鍵字實現(xiàn)的.synchronized關(guān)鍵字修飾代碼塊,修飾該方法。

修飾代碼塊的語法:

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

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

修飾靜態(tài)方法稱稱為同步靜態(tài)方法

synchronized同步代碼塊

package com.wkcto.intrinsiclock;

/**
 * synchronized同步代碼塊
 *  this鎖對象
 * Author: 老崔
 */
public class Test01 {
    public static void main(String[] args) {
        //創(chuàng)建兩個線程,分別調(diào)用mm()方法
        //先創(chuàng)建Test01對象,通過對象名調(diào)用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 ) {     //經(jīng)常使用this當(dāng)前對象作為鎖對象
            for (int i = 1; i <= 100; i++) {
                System.out.println(Thread.currentThread().getName() + " --> " + i);
            }
        }
    }
}
package com.wkcto.intrinsiclock;

/**
 * synchronized同步代碼塊
 *  如果線程的鎖不同, 不能實現(xiàn)同步
 *  想要同步必須使用同一個鎖對象
 * Author: 老崔
 */
public class Test02 {
    public static void main(String[] args) {
        //創(chuàng)建兩個線程,分別調(diào)用mm()方法
        //先創(chuàng)建Test01對象,通過對象名調(diào)用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 ) {     //經(jīng)常使用this當(dāng)前對象作為鎖對象
            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) {
        //創(chuàng)建兩個線程,分別調(diào)用mm()方法
        //先創(chuàng)建Test01對象,通過對象名調(diào)用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) {
        //創(chuàng)建兩個線程,分別調(diào)用mm()方法
        //先創(chuàng)建Test01對象,通過對象名調(diào)用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();

        //第三個線程調(diào)用靜態(tài)方法
        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);
            }
        }
    }
}

 

全部教程
主站蜘蛛池模板: 国产成年人网站 | 精品国产免费一区二区三区 | 日本护士xxxxx18.19 | 欧美性xxx极品hd高清 | 天天操夜夜艹 | 亚洲日本va中文字幕线 | 中国一级特黄高清免费的大片 | 亚洲天天在线日亚洲洲精 | 怡红院免费的全部视频 | 亚洲欧美不卡视频 | 亚洲 欧美 中文 日韩欧美 | 一级片按摩 | 日本免费专区 | 日韩操 | 日韩精品视频在线免费观看 | 97色伦图片在线观看 | 黄色一级免费看 | 国产一级第一级毛片 | 亚洲另类激情专区小说婷婷久 | 国产91久久最新观看地址 | 日本涩涩网站 | 毛片午夜| 在线观看免费国产成人软件 | 久久久这里只有免费精品2018 | 亚洲精品手机在线 | 日韩系列第一页 | 国产精品一区牛牛影视 | 国产亚洲精品精品国产亚洲综合 | 在线有码 | 国产成人精品免费视频大全软件 | 永久免费看www色视频 | 色www 永久免费网站 | 影音先锋2021色资源网站 | 亚洲欧美影院 | 日韩欧美精品在线视频 | 国产精品嫩草影院在线观看免费 | 人人添人人澡人人澡人人诱 | 国产一区亚洲二区 | 高h辣h双处全是肉一对一 | 动漫美女h黄18动漫免费观看 | 国产免费一级高清淫曰本片 |