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

Java模擬實(shí)現(xiàn)機(jī)場過安檢處理流程

 更新時(shí)間:2022年04月22日 09:33:43   作者:chengqiuming  
這篇文章主要為大家詳細(xì)介紹了用Java模擬實(shí)現(xiàn)機(jī)場安全檢查流程的案例,涉及線程的相關(guān)知識(shí),由子線程不斷的檢查通過旅客,感興趣的小伙伴們可以參考一下

一 場景描述

乘飛機(jī)時(shí),在進(jìn)入登機(jī)口之前必須經(jīng)過安全檢查,安檢口類似于獨(dú)木橋,每次只能通過一個(gè)人,工作人員除了檢查你的登機(jī)牌外,還有一些其它檢查。在此模擬一個(gè)非線程安全的安檢口類,旅客(線程)分別手持登機(jī)牌和身份證接受工作人員的檢查。

二 實(shí)戰(zhàn)

1 FlightSecurity

package concurrent.FlightSecurity;
public class FlightSecurity {
    private int count;
    // 登機(jī)牌
    private String boardingPass = "null";
    // 身份證
    private String idCard = "null";
    public void pass(String boardingPass,String idCard){
        this.boardingPass = boardingPass;
        this.idCard = idCard;
        this.count++;
        check();
    }
    private void check() {
        // 簡單測(cè)試,當(dāng)?shù)菣C(jī)牌和身份證首字母不相同時(shí)則表示檢查不通過
        if(boardingPass.charAt(0)!=idCard.charAt(0)){
            throw new RuntimeException("======Excepton======"+toString());
        }
    }
    public String toString(){
        return "The " +count +" paaaenges,boardingPass [" + boardingPass + "],idCard [" + idCard +"]";
    }
}

2 FightSecurityTest

package concurrent.FlightSecurity;
public class FightSecurityTest {
    // 旅客線程
    static class Passengers extends Thread{
        // 機(jī)場安檢類
        private final FlightSecurity fightSecurity;
        // 旅客的身份證
        private final String idCard;
        // 旅客登機(jī)牌
        private final String boardingPass;
        Passengers(FlightSecurity fightSecurity, String idCard, String boardingPass) {
            this.fightSecurity = fightSecurity;
            this.idCard = idCard;
            this.boardingPass = boardingPass;
        }
        @Override
        public void run() {
            while(true){
                // 旅客不斷地過安檢
                fightSecurity.pass(boardingPass,idCard);
            }
        }
    }
    public static void main(String[] args) {
        // 定義三個(gè)旅客,身份證和登機(jī)牌首字母相同
        final FlightSecurity flightSecurity= new FlightSecurity();
        new Passengers(flightSecurity,"A","A").start();
        new Passengers(flightSecurity,"B","B").start();
        new Passengers(flightSecurity,"C","C").start();
    }
}

三 測(cè)試

1 測(cè)試結(jié)果1

Exception in thread "Thread-1" Exception in thread "Thread-0" java.lang.RuntimeException: ======Excepton======The 356 paaaenges,boardingPass [B],idCard [A]
    at concurrent.FlightSecurity.FlightSecurity.check(FlightSecurity.java:20)
    at concurrent.FlightSecurity.FlightSecurity.pass(FlightSecurity.java:14)
    at concurrent.FlightSecurity.FightSecurityTest$Passengers.run(FightSecurityTest.java:24)
java.lang.RuntimeException: ======Excepton======The 356 paaaenges,boardingPass [B],idCard [A]
    at concurrent.FlightSecurity.FlightSecurity.check(FlightSecurity.java:20)
    at concurrent.FlightSecurity.FlightSecurity.pass(FlightSecurity.java:14)
    at concurrent.FlightSecurity.FightSecurityTest$Passengers.run(FightSecurityTest.java:24)

2 測(cè)試結(jié)果2

Exception in thread "Thread-0" Exception in thread "Thread-1" java.lang.RuntimeException: ======Excepton======The 953 paaaenges,boardingPass [C],idCard [C]
    at concurrent.FlightSecurity.FlightSecurity.check(FlightSecurity.java:20)
    at concurrent.FlightSecurity.FlightSecurity.pass(FlightSecurity.java:14)
    at concurrent.FlightSecurity.FightSecurityTest$Passengers.run(FightSecurityTest.java:24)
java.lang.RuntimeException: ======Excepton======The 1039 paaaenges,boardingPass [C],idCard [C]
    at concurrent.FlightSecurity.FlightSecurity.check(FlightSecurity.java:20)
    at concurrent.FlightSecurity.FlightSecurity.pass(FlightSecurity.java:14)
    at concurrent.FlightSecurity.FightSecurityTest$Passengers.run(FightSecurityTest.java:24)

四 問題分析

在多線程情況下調(diào)用 pass 方法,雖然參數(shù)的傳遞百分百保證就是這兩個(gè)值,但是在 pass 方法中對(duì)這兩個(gè)值的賦值很有可能交叉,不能保證原子性操作。

解決的方法是給 pass 方法加上 synchronized 關(guān)鍵字。

public synchronized void pass(String boardingPass,String idCard)

五 說明

在 Java 中經(jīng)常會(huì)聽到線程安全的類和線程非安全的類,所謂線程安全的類是指多個(gè)線程同時(shí)進(jìn)行操作時(shí),不會(huì)引起數(shù)據(jù)不一致問題,反之則是線程非安全的類,在線程安全的類中經(jīng)常會(huì)看到 synchronized 關(guān)鍵字的身影。

到此這篇關(guān)于Java模擬實(shí)現(xiàn)機(jī)場過安檢處理流程的文章就介紹到這了,更多相關(guān)Java 機(jī)場安檢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot中使用Swagger的最全方法詳解

    SpringBoot中使用Swagger的最全方法詳解

    Swagger是一個(gè)規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化Restful風(fēng)格的Web服務(wù),這篇文章主要給大家介紹了關(guān)于SpringBoot中使用Swagger的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • 詳解MySQL的簡易封裝以及使用

    詳解MySQL的簡易封裝以及使用

    本文主要介紹了MySQL的簡易封裝以及使用。具有一定的參考價(jià)值,下面跟著小編一起來看下吧
    2017-01-01
  • Java Annotation Overview詳解

    Java Annotation Overview詳解

    這篇文章主要介紹了Java Annotation Overview,需要的朋友可以參考下
    2014-02-02
  • SpringBoot+MinIO實(shí)現(xiàn)文件上傳、讀取、下載、刪除的使用示例

    SpringBoot+MinIO實(shí)現(xiàn)文件上傳、讀取、下載、刪除的使用示例

    本文主要介紹了SpringBoot+MinIO實(shí)現(xiàn)文件上傳、讀取、下載、刪除的使用示例,詳細(xì)介紹每個(gè)功能實(shí)現(xiàn)的步驟和代碼示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • java圖片對(duì)比度調(diào)整示例代碼

    java圖片對(duì)比度調(diào)整示例代碼

    這篇文章主要給大家介紹了關(guān)于java圖片對(duì)比度調(diào)整的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 詳解springcloud之服務(wù)注冊(cè)與發(fā)現(xiàn)

    詳解springcloud之服務(wù)注冊(cè)與發(fā)現(xiàn)

    本次分享的是關(guān)于springcloud服務(wù)注冊(cè)與發(fā)現(xiàn)的內(nèi)容,將通過分別搭建服務(wù)中心,服務(wù)注冊(cè),服務(wù)發(fā)現(xiàn)來說明,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-06-06
  • Java中Math.round()的用法及說明

    Java中Math.round()的用法及說明

    這篇文章主要介紹了Java中Math.round()的用法及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Java中使用JavaMail多發(fā)郵件及郵件的驗(yàn)證和附件實(shí)現(xiàn)

    Java中使用JavaMail多發(fā)郵件及郵件的驗(yàn)證和附件實(shí)現(xiàn)

    這篇文章主要介紹了Java中使用Java Mail多發(fā)郵件及郵件的驗(yàn)證和附件實(shí)現(xiàn),包括在郵件中加入圖片等功能的實(shí)現(xiàn)講解,需要的朋友可以參考下
    2016-02-02
  • 淺談springboot 屬性定義

    淺談springboot 屬性定義

    本篇文章主要介紹了淺談springboot 屬性定義,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • 詳解使用Spring Security進(jìn)行自動(dòng)登錄驗(yàn)證

    詳解使用Spring Security進(jìn)行自動(dòng)登錄驗(yàn)證

    本篇文章主要介紹了詳解使用Spring Security進(jìn)行自動(dòng)登錄驗(yàn)證,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-09-09

最新評(píng)論

女性| 三台县| 曲阜市| 济阳县| 广东省| 长宁区| 肇源县| 寿阳县| 古浪县| 马公市| 南通市| 句容市| 连南| 南宫市| 安康市| 乌兰县| 龙川县| 电白县| 宣威市| 长岛县| 墨玉县| 白水县| 平果县| 普宁市| 镇江市| 巨野县| 永嘉县| 孟连| 奉节县| 教育| 白山市| 怀集县| 彭山县| 图木舒克市| 淮南市| 滦南县| 桐城市| 南陵县| 嘉鱼县| 姜堰市| 偃师市|