最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java多線程中的互斥鎖解析

 更新時(shí)間:2023年09月15日 11:06:07   作者:伊顰伊笑  
這篇文章主要介紹了Java多線程中的互斥鎖解析,Java語言中,引入了對(duì)象互斥鎖的概念,來保證共享數(shù)據(jù)操作的完整性,每個(gè)對(duì)象都對(duì)應(yīng)于一個(gè)可稱為互斥鎖的標(biāo)記,這個(gè)標(biāo)記用來保證在任一時(shí)刻,只能有一個(gè)線程訪問該對(duì)象,需要的朋友可以參考下

基本介紹

  1. Java語言中,引入了對(duì)象互斥鎖的概念,來保證共享數(shù)據(jù)操作的完整性。
  2. 每個(gè)對(duì)象都對(duì)應(yīng)于一個(gè)可稱為 “ 互斥鎖 ” 的標(biāo)記,這個(gè)標(biāo)記用來保證在任一時(shí)刻,只能有一個(gè)線程訪問該對(duì)象。
  3. 關(guān)鍵字 synchronized 來與對(duì)象的互斥鎖聯(lián)系。當(dāng)某個(gè)對(duì)象用 synchronized 修飾時(shí),表明該對(duì)象在任一時(shí)刻只能由一個(gè)線程訪問
  4. 同步的局限性:導(dǎo)致程序的執(zhí)行效率要降低
  5. 同步方法(非靜態(tài)的)的鎖可以是this,也可以是其他對(duì)象(要求是同一個(gè)對(duì)象)
  6. 同步方法(靜態(tài)的)的鎖為當(dāng)前類本身。

把 synchronized 寫在代碼塊上

package thread_;
/**
 * @Author: Gin
 * @Description:
 * @Modified By: Gin
 * @Date: Created in 16:37 2021/9/27
 */
public class Thread11 {
    public static void main(String[] args) {
        SellThread04 sellThread04 = new SellThread04();
        new Thread(sellThread04).start();
        new Thread(sellThread04).start();
        new Thread(sellThread04).start();
    }
}
class SellThread04 implements Runnable{
    private int ticketsNum = 100;
    private boolean flag = true;
    @Override
    public void run() {
        while (flag) {
            sell();
        }
    }
    /*
        1. public synchronized void sell(){} 就是一個(gè)同步方法
        2. 這時(shí)“鎖”在 this 對(duì)象上
        3. 也可以在代碼塊上寫 synchronized,同步代碼塊,互斥鎖還是在 this 對(duì)象上
           如下:
     */
    public /* synchronized */ void sell(){
        synchronized (this) {
            if(ticketsNum <= 0){
                System.out.println("售票結(jié)束...");
                flag = false;
                return;
            }
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("窗口 " + Thread.currentThread().getName() + " 售票一張, 剩余票數(shù) " + (--ticketsNum));
        }
    }
}

測(cè)試操作同一個(gè)對(duì)象、靜態(tài)方法的鎖的添加

package thread_;
/**
 * @Author: Gin
 * @Description:
 * @Modified By: Gin
 * @Date: Created in 16:37 2021/9/27
 */
public class Thread11 {
    public static void main(String[] args) {
        SellThread04 sellThread04 = new SellThread04();
        new Thread(sellThread04).start();
        new Thread(sellThread04).start();
        new Thread(sellThread04).start();
    }
}
class SellThread04 implements Runnable{
    private int ticketsNum = 100;
    private boolean flag = true;
    // 同步方法(非靜態(tài)的)的鎖可以是this,也可以是其他對(duì)象(要求是同一個(gè)對(duì)象)
    // new 一個(gè) Object 對(duì)象,測(cè)試操作同一個(gè)對(duì)象
    Object object = new Object();
    // 同步方法(靜態(tài)的)的鎖為當(dāng)前類本身。
    public synchronized static void m1(){
        System.out.println("m1");
    }
    // 在靜態(tài)方法中實(shí)現(xiàn)一個(gè)同步代碼塊
    public static void m2(){
        synchronized (SellThread04.class) {
            System.out.println("m2");
        }
    }
    @Override
    public void run() {
        while (flag) {
            sell();
        }
    }
    /*
        1. public synchronized void sell(){} 就是一個(gè)同步方法
        2. 這時(shí)“鎖”在 this 對(duì)象上
        3. 也可以在代碼塊上寫 synchronized,同步代碼塊,互斥鎖還是在 this 對(duì)象上
           如下:
     */
    public /* synchronized */ void sell(){
        synchronized ( /*this*/ object ) { // 測(cè)試操作同一個(gè)對(duì)象
            if(ticketsNum <= 0){
                System.out.println("售票結(jié)束...");
                flag = false;
                return;
            }
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("窗口 " + Thread.currentThread().getName() + " 售票一張, 剩余票數(shù) " + (--ticketsNum));
        }
    }
}

細(xì)節(jié)

同步方法如果沒有使用 static 修飾:默認(rèn)鎖對(duì)象為 this如果方法使用 static 修飾,默認(rèn)鎖對(duì)象:當(dāng)前類.class

到此這篇關(guān)于Java多線程中的互斥鎖解析的文章就介紹到這了,更多相關(guān)Java互斥鎖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Nacos服務(wù)多級(jí)存儲(chǔ)模型使用及說明

    Nacos服務(wù)多級(jí)存儲(chǔ)模型使用及說明

    文章介紹了服務(wù)分級(jí)存儲(chǔ)模型,通過Nacos將同一機(jī)房?jī)?nèi)的實(shí)例劃分為一個(gè)集群,微服務(wù)互相訪問時(shí)應(yīng)優(yōu)先訪問同集群實(shí)例,以提高訪問速度,通過配置application.yml文件,可以實(shí)現(xiàn)集群的創(chuàng)建和管理
    2026-02-02
  • j2ee mybatis注解@Data,@TableName,@TableField使用方式

    j2ee mybatis注解@Data,@TableName,@TableField使用方式

    這篇文章主要介紹了j2ee mybatis注解@Data,@TableName,@TableField使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Flink實(shí)現(xiàn)往Kafka中多個(gè)topic發(fā)送消息

    Flink實(shí)現(xiàn)往Kafka中多個(gè)topic發(fā)送消息

    文章介紹了使用Flink 1.13.2 和 Kafka 2.6.2 從Kafka讀取數(shù)據(jù),并根據(jù)邏輯將數(shù)據(jù)分配到不同的topic,提到了需要重寫FlinkKafka的Key序列化器,并加入自定義邏輯以發(fā)送消息到指定的topic,文中還包括了配置Kafka信息和如何連接FlinkKafka的步驟
    2025-10-10
  • 詳解Java如何有效避免空指針

    詳解Java如何有效避免空指針

    空指針,也就是NullPointerException 簡(jiǎn)稱NPE的,怕一下子寫出NPE,部分的伙伴看不懂,索性就改成了空指針,在實(shí)際的開發(fā)中,我們最討厭的就是遇到空指針了,業(yè)務(wù)跑著跑著發(fā)現(xiàn)了空指針,所以本文詳細(xì)介紹了Java如何有效的避免空指針,需要的朋友可以參考下
    2023-12-12
  • java遞歸法求字符串逆序

    java遞歸法求字符串逆序

    這篇文章主要介紹了java遞歸法求字符串逆序,涉及java遞歸調(diào)用的相關(guān)操作技巧,需要的朋友可以參考下
    2015-05-05
  • 純Java手寫TopoJSON生成器的實(shí)現(xiàn)

    純Java手寫TopoJSON生成器的實(shí)現(xiàn)

    本文實(shí)現(xiàn)了純 Java、零依賴、可直接運(yùn)行的 TopoJSON 生成器工具類,相比簡(jiǎn)易實(shí)現(xiàn),更貼合生產(chǎn)環(huán)境需求,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-03-03
  • Java中的魔法值解決

    Java中的魔法值解決

    這篇文章主要介紹了Java中的魔法值解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Eclipse中改變默認(rèn)的workspace的方法及說明詳解

    Eclipse中改變默認(rèn)的workspace的方法及說明詳解

    eclipse中改變默然的workspace的方法有哪幾種呢?接下來腳本之家小編給大家介紹Eclipse中改變默認(rèn)的workspace的方法及說明,對(duì)eclipse改變workspace相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2016-04-04
  • 為什么Java項(xiàng)目中別用!=null做判空

    為什么Java項(xiàng)目中別用!=null做判空

    本文主要介紹了為什么Java項(xiàng)目中別用!=null做判空,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • JavaCV 拉流存儲(chǔ)到本地示例解析

    JavaCV 拉流存儲(chǔ)到本地示例解析

    這篇文章主要介紹了JavaCV 拉流存儲(chǔ)到本地示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08

最新評(píng)論

黄龙县| 农安县| 甘肃省| 陇西县| 葫芦岛市| 南丹县| 屏边| 彩票| 吉安市| 临澧县| 东平县| 盈江县| 定陶县| 伊川县| 龙川县| 娄底市| 罗源县| 兴隆县| 宝应县| 开化县| 多伦县| 奈曼旗| 山西省| 漯河市| 肇州县| 北辰区| 水城县| 竹山县| 乐亭县| 榆社县| 陆河县| 松江区| 家居| 西青区| 桂林市| 乌审旗| 荔浦县| 电白县| 东乌| 北碚区| 盐池县|