java實(shí)現(xiàn)多線程賣(mài)票功能
更新時(shí)間:2019年07月15日 08:38:43 作者:jhhuang4836
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)多線程賣(mài)票功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
java多線程賣(mài)票直接先看個(gè)例子:
public class SelTicketsMainTest { public static void main(String[] args) { SaleTickets1 saleTickets = new SaleTickets1(); for(int t=1;t<=3;t++) { new Thread(saleTickets).start(); } } } class SaleTickets1 implements Runnable{ private int ticketCount = 10;// 總的票數(shù),這個(gè)是共享資源,多個(gè)線程都會(huì)訪問(wèn) public void run() { while (true)// 循環(huán)是指線程不停的去賣(mài)票 { synchronized (this)// 當(dāng)操作的是共享數(shù)據(jù)時(shí), // 用同步代碼塊進(jìn)行包圍起來(lái),執(zhí)行里面的代碼需要mutex的鎖,但是mutex只有一個(gè)鎖。這樣在執(zhí)行時(shí),只能有一個(gè)線程執(zhí)行同步代碼塊里面的內(nèi)容 { if(ticketCount>0) { ticketCount--; System.out.println(Thread.currentThread().getName() + "正在賣(mài)票,還剩" + ticketCount + "張票"); } } /** * 在同步代碼塊里面睡覺(jué),和不睡效果是一樣 的,作用只是自已不執(zhí)行,也不讓線程執(zhí)行。sleep不釋放鎖,抱著鎖睡覺(jué)。其他線程拿不到鎖,也不能執(zhí)行同步代碼。wait()可以釋放鎖 * 所以把睡覺(jué)放到同步代碼塊的外面,這樣賣(mài)完一張票就睡一會(huì),讓其他線程再賣(mài),這樣所有的線程都可以賣(mài)票 */ try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } }
這是賣(mài)票的經(jīng)典案例,在這做個(gè)記錄。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java中常見(jiàn)的編碼集問(wèn)題總結(jié)
這篇文章主要為大家整理了一些Java中常見(jiàn)的編碼集問(wèn)題,文中的示例代碼講解詳細(xì),對(duì)我們深入理解Java有一定的幫助,感興趣的小伙伴可以了解一下2023-02-02SpringBoot中Controller的傳參方式詳細(xì)講解
這篇文章主要介紹了SpringBoot在Controller層接收參數(shù)的常用方法,Controller接收參數(shù)的常用方式總體可以分為三類(lèi),第一類(lèi)是Get請(qǐng)求通過(guò)拼接url進(jìn)行傳遞,第二類(lèi)是Post請(qǐng)求通過(guò)請(qǐng)求體進(jìn)行傳遞,第三類(lèi)是通過(guò)請(qǐng)求頭部進(jìn)行參數(shù)傳遞,下面我們來(lái)詳細(xì)看看2023-01-01基于java swing實(shí)現(xiàn)答題系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了基于java swing實(shí)現(xiàn)答題系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01Spring?Boot中的max-http-header-size配置方式
這篇文章主要介紹了Spring?Boot中的max-http-header-size配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09