亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

java多線程之火車售票系統模擬

2019-11-06 06:40:59
字體:
來源:轉載
供稿:網友

1.前言

為了學習多線程共享與通信,我們模擬一個火車售票系統,假設有10張火車票,三個窗口(也就是三個線程)同時進行售票。

2.非同步代碼

package com.tl.skyLine.thread;/** * Created by tl on 17/3/6. */public class SellTicket {    public static void main(String[] args) {        TicketWindow tw = new TicketWindow();        Thread t1 = new Thread(tw, "一號窗口");        Thread t2 = new Thread(tw, "二號窗口");        Thread t3 = new Thread(tw, "三號窗口");        t1.start();        t2.start();        t3.start();    }}class TicketWindow implements Runnable {    PRivate int tickets = 10;    @Override    public void run() {        while (true) {            if (tickets > 0) {                System.out.println("還剩余票:" + tickets + "張");                tickets--;                System.out.println(Thread.currentThread().getName() + "賣出一張火車票,還剩" + tickets + "張");            } else {                System.out.println("余票不足,暫停出售!");//                wait,notify和notifyAll只能在同步控制方法或者同步控制塊里面使用,而sleep可以在任何地方使用                try {                    Thread.sleep(1000 * 60 * 5);                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        }    }}打印結果:

還剩余票:10張還剩余票:10張還剩余票:10張二號窗口賣出一張火車票,還剩7張還剩余票:7張三號窗口賣出一張火車票,還剩8張一號窗口賣出一張火車票,還剩9張還剩余票:6張還剩余票:6張二號窗口賣出一張火車票,還剩6張還剩余票:4張三號窗口賣出一張火車票,還剩4張還剩余票:3張一號窗口賣出一張火車票,還剩5張三號窗口賣出一張火車票,還剩2張還剩余票:2張三號窗口賣出一張火車票,還剩1張還剩余票:1張三號窗口賣出一張火車票,還剩0張余票不足,暫停出售!二號窗口賣出一張火車票,還剩3張余票不足,暫停出售!還剩余票:2張一號窗口賣出一張火車票,還剩-1張余票不足,暫停出售!上面結果,可以清楚地看到,由于三個線程可以同時訪問一個任務,也就是售票任務,會出現火車票還剩-1張這種不合實際的問題,之所以出現是因為假設在某一瞬間,tickets為1時,tickets > 0為true,A線程運行到tickets--這一行代碼,此時還沒有減去1,同時另外一個線程B剛好運行到tickets > 0這一行代碼,判斷成功,開始執行賣票,此時A線程減去一張票,tickets=0,然后B線程又減去一張,則剩-1張。所以此時需要用到同步鎖synchronized。保證某一時刻只能有一個線程執行售票功能。

3.同步代碼

package com.tl.skyLine.thread;/** * Created by tl on 17/3/6. */public class SellTicket {    public static void main(String[] args) {        TicketWindow tw = new TicketWindow();        Thread t1 = new Thread(tw, "一號窗口");        Thread t2 = new Thread(tw, "二號窗口");        Thread t3 = new Thread(tw, "三號窗口");        t1.start();        t2.start();        t3.start();    }}class TicketWindow implements Runnable {    private int tickets = 10;    @Override    public synchronized void run() {        while (true) {            if (tickets > 0) {                System.out.println(Thread.currentThread().getName() + "準備出票,還剩余票:" + tickets + "張");                tickets--;                System.out.println(Thread.currentThread().getName() + "賣出一張火車票,還剩" + tickets + "張");            } else {                System.out.println("余票不足,暫停出售!");//                wait,notify和notifyAll只能在同步控制方法或者同步控制塊里面使用,而sleep可以在任何地方使用                try {                    Thread.sleep(1000 * 60 * 5);                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        }    }}

等同于:

class TicketWindow implements Runnable {                                                                                        private int tickets = 10;                                                                                                                                                                                                                               @Override                                                                                                                   public void run() {                                                                                                             while (true) {                                                                                                                  synchronized (this) {                                                                                                           if (tickets > 0) {                                                                                                              System.out.println(Thread.currentThread().getName() + "準備出票,還剩余票:" + tickets + "張");                                        tickets--;                                                                                                                  System.out.println(Thread.currentThread().getName() + "賣出一張火車票,還剩" + tickets + "張");                                    } else {                                                                                                                        System.out.println("余票不足,暫停出售!");                                                                       //                wait,notify和notifyAll只能在同步控制方法或者同步控制塊里面使用,而sleep可以在任何地方使用                                                                     try {                                                                                                                           Thread.sleep(1000 * 60 * 5);                                                                                            } catch (InterruptedException e) {                                                                                              e.printStackTrace();                                                                                                    }                                                                                                                       }                                                                                                                       }                                                                                                                       }                                                                                                                       }                                                                                                                       }                                                                                                                           

結果:

一號窗口準備出票,還剩余票:10張一號窗口賣出一張火車票,還剩9張一號窗口準備出票,還剩余票:9張一號窗口賣出一張火車票,還剩8張一號窗口準備出票,還剩余票:8張一號窗口賣出一張火車票,還剩7張一號窗口準備出票,還剩余票:7張一號窗口賣出一張火車票,還剩6張一號窗口準備出票,還剩余票:6張一號窗口賣出一張火車票,還剩5張一號窗口準備出票,還剩余票:5張一號窗口賣出一張火車票,還剩4張一號窗口準備出票,還剩余票:4張一號窗口賣出一張火車票,還剩3張一號窗口準備出票,還剩余票:3張一號窗口賣出一張火車票,還剩2張一號窗口準備出票,還剩余票:2張一號窗口賣出一張火車票,還剩1張一號窗口準備出票,還剩余票:1張一號窗口賣出一張火車票,還剩0張余票不足,暫停出售!

synchronized:

synchronized是java中的關鍵字,是一種同步鎖。它修飾的對象有以下幾種:1. 修飾一個代碼塊,被修飾的代碼塊稱為同步語句塊,其作用的范圍是大括號{}括起來的代碼,作用的對象是調用這個代碼塊的對象;2. 修飾一個方法,被修飾的方法稱為同步方法,其作用的范圍是整個方法,作用的對象是調用這個方法的對象;3. 修改一個靜態的方法,其作用的范圍是整個靜態方法,作用的對象是這個類的所有對象;4. 修改一個類,其作用的范圍是synchronized后面括號括起來的部分,作用主的對象是這個類的所有對象。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
粉嫩av一区二区三区免费野| 成人欧美一区二区三区在线湿哒哒| 国产欧美日韩免费| 亚洲欧美在线看| 懂色av一区二区三区| 亚洲电影免费在线观看| 日本不卡视频在线播放| 国产精品网红福利| 尤物yw午夜国产精品视频| 26uuu另类亚洲欧美日本老年| 国产不卡av在线| 韩曰欧美视频免费观看| 69久久夜色精品国产7777| 国产精品欧美久久久| 欧美日韩亚洲网| 欧美大片大片在线播放| 日本亚洲欧美三级| 91美女福利视频高清| 欧美激情手机在线视频| 国产欧美一区二区三区久久人妖| 亚洲人成欧美中文字幕| 一级做a爰片久久毛片美女图片| 91av在线视频观看| 欧美性猛交xxxx黑人猛交| 亚洲欧美制服另类日韩| 91香蕉亚洲精品| 国产精品美女免费看| 欧美黑人视频一区| 国产精品久久久久91| 日韩中文字幕国产精品| 成人黄色激情网| 91精品在线国产| 亚洲国产高清福利视频| 国产在线拍揄自揄视频不卡99| 欧美成人午夜免费视在线看片| 国产成人黄色av| 97国产精品免费视频| 午夜精品久久久久久久久久久久| 久久大大胆人体| 日韩在线中文字| 日韩精品在线播放| 欧美日韩免费网站| 国产在线观看精品一区二区三区| 久久精品国产视频| 7777免费精品视频| 精品五月天久久| 国产日韩欧美一二三区| 92福利视频午夜1000合集在线观看| 91在线视频成人| 国产精品99久久99久久久二8| 日韩精品视频在线免费观看| 亚洲自拍av在线| 色视频www在线播放国产成人| 亚洲а∨天堂久久精品喷水| 91精品在线影院| 麻豆精品精华液| 91av在线播放| 欧美亚洲视频在线观看| 在线观看精品国产视频| 久久精品国产亚洲精品| 色偷偷噜噜噜亚洲男人的天堂| 国产精品一区二区久久久久| 久久久亚洲福利精品午夜| 日韩亚洲精品电影| 蜜月aⅴ免费一区二区三区| 日韩av在线高清| 亚洲精品wwwww| 少妇av一区二区三区| 国产成+人+综合+亚洲欧美丁香花| 日韩精品免费电影| 日韩亚洲第一页| 亚洲aa在线观看| 亚洲japanese制服美女| 精品人伦一区二区三区蜜桃免费| 91在线视频一区| 国产精品爽黄69| 美日韩丰满少妇在线观看| 九九热99久久久国产盗摄| 日韩av在线网址| 亚洲精品国产精品乱码不99按摩| 俺也去精品视频在线观看| 亚洲乱码av中文一区二区| 日韩欧美精品在线观看| 日韩资源在线观看| 91香蕉国产在线观看| 欧美一级成年大片在线观看| 久久国产精品网站| 亚洲精品日韩久久久| 日本精品免费观看| 午夜精品理论片| 欧美第一黄色网| 色婷婷**av毛片一区| 欧美成人一区二区三区电影| 日韩免费中文字幕| 国模私拍一区二区三区| 欧美交受高潮1| 色视频www在线播放国产成人| 亚洲国产精品久久久久秋霞蜜臀| 国产精品网站视频| 精品久久久久久久久久久久久| 国产午夜精品免费一区二区三区| 色偷偷噜噜噜亚洲男人的天堂| 国产精品第3页| 午夜精品一区二区三区在线视| 久久亚洲国产成人| 国产精品爽黄69| 欧美大片网站在线观看| 久久精品99久久香蕉国产色戒| 欧美最猛性xxxxx免费| 亚洲男人天堂久| 欧美精品久久久久久久| 久久国产精品影片| 日韩视频永久免费观看| 色吧影院999| 亚洲欧美精品一区| 欧美黑人性猛交| 奇米四色中文综合久久| 亚洲成人久久久| 欧美黑人性视频| 国产精品成人久久久久| 日韩av在线影视| 欧美精品日韩www.p站| 精品伊人久久97| 91免费电影网站| 午夜精品久久久99热福利| 在线精品91av| 欧美日韩国产在线看| 亚洲国产精品久久久久秋霞不卡| 国产精品视频一区国模私拍| 影音先锋日韩有码| 国产精品久久久久久av| 亚洲国产精品人人爽夜夜爽| 亚洲午夜激情免费视频| 欧美尤物巨大精品爽| 日韩av免费在线| 亚洲视频网站在线观看| 日韩在线视频网站| 欧美成人免费小视频| 91在线视频九色| 国产精品久久久久久一区二区| 欧美性少妇18aaaa视频| 全亚洲最色的网站在线观看| 欧美日韩国产123| 91老司机在线| 成人午夜在线观看| 久久精品国产一区| 亚洲影院高清在线| 日韩一级裸体免费视频| 欧美激情视频在线观看| 中文字幕亚洲欧美日韩高清| 亚洲第一页中文字幕| 成人福利免费观看| 6080yy精品一区二区三区| 亚洲成人精品av| 亚洲欧美资源在线| 亚洲一区美女视频在线观看免费| 久久久av电影| 日产精品久久久一区二区福利| 欧美电影在线免费观看网站| 国产精品观看在线亚洲人成网| 97国产suv精品一区二区62| 亚洲热线99精品视频| 国产精品久久久久久久久粉嫩av| 久久黄色av网站|