java多線程實(shí)現(xiàn)同步鎖賣票實(shí)戰(zhàn)項(xiàng)目
同步概念與方法:




窗口類:
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è)試類:
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)同步鎖賣票實(shí)戰(zhàn)項(xiàng)目的文章就介紹到這了,更多相關(guān)java 同步鎖賣票內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Maven入門之使用Nexus搭建Maven私服及上傳下載jar包
這篇文章主要介紹了Maven入門之使用Nexus搭建Maven私服及上傳下載jar包,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
SpringBoot整合阿里云視頻點(diǎn)播的過(guò)程詳解
視頻點(diǎn)播(ApsaraVideo for VoD)是集音視頻采集、編輯、上傳、自動(dòng)化轉(zhuǎn)碼處理、媒體資源管理、分發(fā)加速于一體的一站式音視頻點(diǎn)播解決方案。這篇文章主要介紹了SpringBoot整合阿里云視頻點(diǎn)播的詳細(xì)過(guò)程,需要的朋友可以參考下2021-12-12
java中for和forEach的速度比較實(shí)例Demo
for循環(huán)中的循環(huán)條件中的變量只求一次值,而foreach語(yǔ)句是java5新增,在遍歷數(shù)組、集合的時(shí)候,foreach擁有不錯(cuò)的性能,這篇文章主要給大家介紹了關(guān)于java中for和forEach速度比較的相關(guān)資料,需要的朋友可以參考下2021-08-08
詳解Mybatis中的 ${} 和 #{}區(qū)別與用法
這篇文章主要介紹了Mybatis中的 ${} 和 #{}區(qū)別與用法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
IDEA遇到Internal error. Please refer to http://jb. gg/ide/crit
這篇文章主要介紹了IDEA遇到Internal error. Please refer to http://jb. gg/ide/critical-startup-errors的問(wèn)題及解決辦法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下2020-08-08
關(guān)于Springboot | @RequestBody 接收到的參數(shù)對(duì)象屬性為空的問(wèn)題
這篇文章主要介紹了關(guān)于Springboot | @RequestBody 接收到的參數(shù)對(duì)象屬性為空的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03

