模擬買票小練習-線程資源同步小練習-synchronized使用

      網友投稿 646 2025-04-01

      模擬買票練習多線程

      使用Thread和Runable練習買票和練習共享資源問題

      方式一:繼承Thread類

      1.首先定義一個ticks變量為總票數為10

      1

      2.定義run方法,循環的扣除票數量(簡單寫一下打印ticks票數)

      1

      3.模擬四個窗口購買票

      1

      問題1:打印的結果是每個窗口都打印了10張票,也就是說變量tickets沒有共享

      解決1:通過給變量添加static,使變量變為共享變量如(代碼1)

      解決2:通過實現runable接口解決共享變量問題(代碼2)

      問題2:打印的ticks數量順序不是從10->1,順序亂了,也就是數據不同步

      解決:通過代碼塊同步或者方法同步解決問題(加鎖)(代碼3、4)

      代碼1:

      package?com.lzw.java_thread.tickets;/** ?*?使用Thread和Runable練習買票和練習共享資源問題 ?*?方式一:繼承Thread類 ?*??????1.首先定義一個ticks變量為總票數為10 ?*??????2.定義run方法,循環的扣除票數量(簡單寫一下打印ticks票數) ?*??????3.模擬四個窗口購買票 ?*/public?class?ThreadTicks?extends?Thread{ ????private?static?int?tickets?=?10; ????@Override ????public?void?run()?{ ????????while?(tickets>0){ ????????????try?{ ????????????????Thread.sleep(1); ????????????}?catch?(InterruptedException?e)?{ ????????????????e.printStackTrace(); ????????????} ????????????synchronized?(this){ ????????????????if?(tickets>0){ ????????????????????System.out.println(Thread.currentThread().getName()?+?"?剩余"?+?(tickets--)?+?"張票"); ????????????????} ????????????} ????????} ????} ????public?static?void?main(String[]?args)?{ ????????ThreadTicks?tt1?=?new?ThreadTicks(); ????????ThreadTicks?tt2?=?new?ThreadTicks(); ????????ThreadTicks?tt3?=?new?ThreadTicks(); ????????ThreadTicks?tt4?=?new?ThreadTicks(); ????????tt1.start(); ????????tt2.start(); ????????tt3.start(); ????????tt4.start(); ????}}1234567891011121314151617181920212223242526272829303132333435363738

      代碼2:

      package?com.lzw.java_thread.tickets;/** ?*第二種方式: ?*??????1.實現Runable接口 ?*??????2.創建四個線程都傳入一個Runable子類,實現對象資源共享 ?*??????3.調用start()方法 ?*/public?class?RunableTickets?implements?Runnable{ ????private?int?tickets?=?10; ????@Override ????public?void?run()?{ ????????while?(tickets>0){ ????????????try?{ ????????????????Thread.sleep(1); ????????????}?catch?(InterruptedException?e)?{ ????????????????e.printStackTrace(); ????????????} ????????????if?(tickets>0){ ????????????????System.out.println(Thread.currentThread().getName()+"?剩余"+(tickets--)+"張票"); ????????????} ????????} ????} ????public?static?void?main(String[]?args)?{ ????????RunableTickets?rtt?=?new?RunableTickets(); ????????Thread?td1?=?new?Thread(rtt); ????????Thread?td2?=?new?Thread(rtt); ????????Thread?td3?=?new?Thread(rtt); ????????Thread?td4?=?new?Thread(rtt); ????????td1.start(); ????????td2.start(); ????????td3.start(); ????????td4.start(); ????}}123456789101112131415161718192021222324252627282930313233343536

      代碼3:

      package?com.lzw.java_thread.tickets;/** ?*?@Auther:?lzw ?*?使用同步代碼塊,實現共享資源同步 ?*/public?class?RunableTickets1?implements?Runnable{ ????private?int?tickets?=?10; ????@Override ????public?void?run()?{ ????????while?(tickets>0){ ????????????try?{ ????????????????Thread.sleep(100); ????????????}?catch?(InterruptedException?e)?{ ????????????????e.printStackTrace(); ????????????} ????????????synchronized?(this){ ????????????????if?(tickets>0){ ????????????????????System.out.println(Thread.currentThread().getName()+"?剩余"+(tickets--)+"張票"); ????????????????} ????????????} ????????} ????} ????public?static?void?main(String[]?args)?{ ????????RunableTickets1?rtt?=?new?RunableTickets1(); ????????Thread?td1?=?new?Thread(rtt); ????????Thread?td2?=?new?Thread(rtt); ????????Thread?td3?=?new?Thread(rtt); ????????Thread?td4?=?new?Thread(rtt); ????????td1.start(); ????????td2.start(); ????????td3.start(); ????????td4.start(); ????}}12345678910111213141516171819202122232425262728293031323334353637

      代碼4:

      模擬買票小練習-線程資源同步小練習-synchronized使用

      package?com.lzw.java_thread.tickets;/** ?*?@Auther:?lzw ?*?使用同步方法,實現共享資源同步 ?*/public?class?RunableTickets2?implements?Runnable{ ????private?int?tickets?=?10; ????@Override ????public?void?run()?{ ????????while?(tickets>0){ ????????????try?{ ????????????????Thread.sleep(100); ????????????}?catch?(InterruptedException?e)?{ ????????????????e.printStackTrace(); ????????????} ????????????????this.sale(); ????????} ????} ????public?synchronized?void?sale(){ ????????if?(tickets>0){ ????????????System.out.println(Thread.currentThread().getName()+"?剩余"+(tickets--)+"張票"); ????????} ????} ????public?static?void?main(String[]?args)?{ ????????RunableTickets2?rtt?=?new?RunableTickets2(); ????????Thread?td1?=?new?Thread(rtt); ????????Thread?td2?=?new?Thread(rtt); ????????Thread?td3?=?new?Thread(rtt); ????????Thread?td4?=?new?Thread(rtt); ????????td1.start(); ????????td2.start(); ????????td3.start(); ????????td4.start(); ????}}

      任務調度

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:關于機器學習十種方式變革制造業的介紹和應用
      下一篇:wps如何合并多個excel文件(wps怎么合并多個excel表格
      相關文章
      亚洲视频在线不卡| 亚洲国产精品久久久久| 亚洲另类激情专区小说图片| 国产精品亚洲精品| 亚洲男女一区二区三区| 亚洲人成在线播放网站岛国| 国产亚洲色婷婷久久99精品| 亚洲色成人中文字幕网站| 国产日产亚洲系列| 亚洲精品乱码久久久久久久久久久久| 91麻豆精品国产自产在线观看亚洲| 亚洲男人天堂2020| 亚洲一级黄色视频| 国产亚洲人成网站在线观看| 亚洲日韩aⅴ在线视频| 亚洲成AV人片在WWW色猫咪| 亚洲国产成人精品无码区在线观看| 亚洲AV无码乱码国产麻豆穿越| 亚洲AV日韩AV鸥美在线观看| 日韩亚洲Av人人夜夜澡人人爽| 亚洲色偷偷偷网站色偷一区| 亚洲人成免费电影| 亚洲欧美一区二区三区日产| 国产青草亚洲香蕉精品久久| 亚洲一级特黄大片无码毛片 | 国产91在线|亚洲| 亚洲色大18成人网站WWW在线播放 亚洲色大成WWW亚洲女子 | 亚洲成AV人片在线观看| 日韩亚洲AV无码一区二区不卡| 亚洲精品免费在线视频| 中文有码亚洲制服av片| 亚洲精品久久无码| 亚洲国产精品成人| 国产亚洲一区二区三区在线| 久久久久亚洲AV无码麻豆| 精品日韩99亚洲的在线发布| 亚洲av中文无码字幕色不卡| 亚洲精品视频在线看| 亚洲国产精品成人久久| 亚洲日韩乱码中文无码蜜桃臀| 亚洲熟女www一区二区三区|