java多線程實(shí)現(xiàn)同步鎖賣(mài)票實(shí)戰(zhàn)項(xiàng)目
同步概念與方法:
窗口類(lèi):
public class Ticket implements Runnable{ int tickets=20;//總共20張票 @Override public void run() { while (tickets>0) { synchronized (this) { if(tickets>0) { //售票 try { System.out.println(Thread.currentThread().getName()+"正在售票"); Thread.sleep(200);//模擬售票操作時(shí)間 tickets--;//完成售票 System.out.println(Thread.currentThread().getName()+"售票完成,"+"剩余"+tickets+"張票"); } catch (InterruptedException e) { e.printStackTrace(); } } } } } }
測(cè)試類(lèi):
public class Test { public static void main(String[] args) { Ticket ticket = new Ticket(); //模擬三個(gè)窗口售票 Thread t1=new Thread(ticket); t1.setName("窗口1"); t1.start(); Thread t2=new Thread(ticket); t2.setName("窗口2"); t2.start(); Thread t3=new Thread(ticket); t3.setName("窗口3"); t3.start(); } }
測(cè)試結(jié)果:
窗口1正在售票
窗口1售票完成,剩余19張票
窗口1正在售票
窗口1售票完成,剩余18張票
窗口1正在售票
窗口1售票完成,剩余17張票
窗口3正在售票
窗口3售票完成,剩余16張票
窗口2正在售票
窗口2售票完成,剩余15張票
窗口2正在售票
窗口2售票完成,剩余14張票
窗口2正在售票
窗口2售票完成,剩余13張票
窗口2正在售票
窗口2售票完成,剩余12張票
窗口2正在售票
窗口2售票完成,剩余11張票
窗口2正在售票
窗口2售票完成,剩余10張票
窗口2正在售票
窗口2售票完成,剩余9張票
窗口2正在售票
窗口2售票完成,剩余8張票
窗口2正在售票
窗口2售票完成,剩余7張票
窗口2正在售票
窗口2售票完成,剩余6張票
窗口2正在售票
窗口2售票完成,剩余5張票
窗口2正在售票
窗口2售票完成,剩余4張票
窗口2正在售票
窗口2售票完成,剩余3張票
窗口2正在售票
窗口2售票完成,剩余2張票
窗口2正在售票
窗口2售票完成,剩余1張票
窗口2正在售票
窗口2售票完成,剩余0張票Process finished with exit code 0
不加同步鎖測(cè)試結(jié)果:
窗口3正在售票
窗口1正在售票
窗口2正在售票
窗口1售票完成,剩余18張票
窗口1正在售票
窗口2售票完成,剩余19張票
窗口3售票完成,剩余19張票
窗口2正在售票
窗口3正在售票
窗口2售票完成,剩余16張票
窗口2正在售票
窗口1售票完成,剩余15張票
窗口3售票完成,剩余16張票
窗口1正在售票
窗口3正在售票
窗口3售票完成,剩余13張票
窗口1售票完成,剩余14張票
窗口1正在售票
窗口2售票完成,剩余12張票
窗口2正在售票
窗口3正在售票
窗口2售票完成,剩余10張票
窗口1售票完成,剩余11張票
窗口1正在售票
窗口3售票完成,剩余11張票
窗口2正在售票
窗口3正在售票
窗口2售票完成,剩余8張票
窗口1售票完成,剩余8張票
窗口3售票完成,剩余8張票
窗口1正在售票
窗口2正在售票
窗口3正在售票
窗口2售票完成,剩余5張票
窗口1售票完成,剩余5張票
窗口3售票完成,剩余7張票
窗口1正在售票
窗口2正在售票
窗口3正在售票
窗口2售票完成,剩余2張票
窗口1售票完成,剩余3張票
窗口3售票完成,剩余2張票
窗口1正在售票
窗口2正在售票
窗口3正在售票
窗口3售票完成,剩余1張票
窗口2售票完成,剩余0張票
窗口1售票完成,剩余1張票Process finished with exit code 0
synchronized與Lock鎖的區(qū)別:
到此這篇關(guān)于java多線程實(shí)現(xiàn)同步鎖賣(mài)票實(shí)戰(zhàn)項(xiàng)目的文章就介紹到這了,更多相關(guān)java 同步鎖賣(mài)票內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
idea每次新打開(kāi)的項(xiàng)目窗口maven都要重新設(shè)置問(wèn)題
這篇文章主要介紹了idea每次新打開(kāi)的項(xiàng)目窗口maven都要重新設(shè)置問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11SpringBoot項(xiàng)目整合mybatis的方法步驟與實(shí)例
今天小編就為大家分享一篇關(guān)于SpringBoot項(xiàng)目整合mybatis的方法步驟與實(shí)例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03解決Java?結(jié)構(gòu)化數(shù)據(jù)處理開(kāi)源庫(kù)?SPL的問(wèn)題
這篇文章主要介紹了Java?結(jié)構(gòu)化數(shù)據(jù)處理開(kāi)源庫(kù)?SPL的問(wèn)題,Scala提供了較豐富的結(jié)構(gòu)化數(shù)據(jù)計(jì)算函數(shù),但編譯型語(yǔ)言的特點(diǎn),也使它不能成為理想的結(jié)構(gòu)化數(shù)據(jù)計(jì)算類(lèi)庫(kù),對(duì)此內(nèi)容感興趣的朋友一起看看吧2022-03-03IDEA導(dǎo)入jar包的完整實(shí)現(xiàn)步驟
由于導(dǎo)入jar包項(xiàng)目存在很多不確定的問(wèn)題,導(dǎo)致每次都需要調(diào)試、配置好多遍,對(duì)此特意記錄下來(lái),這篇文章主要給大家介紹了關(guān)于IDEA導(dǎo)入jar包的相關(guān)資料,需要的朋友可以參考下2024-01-01RestTemplate調(diào)用POST和GET請(qǐng)求示例詳解
這篇文章主要為大家介紹了RestTemplate調(diào)用POST和GET請(qǐng)求示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03springboot 實(shí)現(xiàn)記錄業(yè)務(wù)日志和異常業(yè)務(wù)日志的操作
這篇文章主要介紹了springboot 實(shí)現(xiàn)記錄業(yè)務(wù)日志和異常業(yè)務(wù)日志的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07