Java多線(xiàn)程Runable售票系統(tǒng)實(shí)現(xiàn)過(guò)程解析
一、無(wú)等待,直接出票【雖然解決了不會(huì)沖票問(wèn)題,但顯然不符合實(shí)際生活】:
package com.thread.sale;
public class Sale {
public static void main(String[] args) {//悟,那么設(shè)計(jì)爬蟲(chóng)的時(shí)候,下載的資源唯一,使用多線(xiàn)程下載
SaleTickets t = new SaleTickets();//關(guān)鍵在這里,只創(chuàng)建一個(gè)對(duì)象,而后交給線(xiàn)程去執(zhí)行這個(gè)任務(wù),達(dá)到目的
Thread thread1 = new Thread(t);
Thread thread2 = new Thread(t);
Thread thread3 = new Thread(t);
Thread thread4 = new Thread(t);
thread1.start();
thread2.start();thread3.start();thread4.start();
}
}
class SaleTickets implements Runnable{
private int tickets = 1;
public void run() {
// TODO Auto-generated method stub
while (true) {
if (tickets<=100) {
System.out.println(Thread.currentThread().getName()+"銷(xiāo)售第"+tickets+++"票");
}else {
break;
}
}
}
}
二、等待客戶(hù)買(mǎi)票的實(shí)現(xiàn):
很顯然,這就牽涉了前面的生產(chǎn)者和消費(fèi)者的問(wèn)題;那么就要這樣設(shè)計(jì):
模擬后臺(tái)發(fā)售票的部門(mén)【生產(chǎn)者producer】----->票務(wù)系統(tǒng)【資源池common】---->購(gòu)票者【消費(fèi)者consumer】
系統(tǒng)設(shè)計(jì)上:
在實(shí)際生產(chǎn)生活中,應(yīng)該是消費(fèi)者購(gòu)買(mǎi)票的客戶(hù)端購(gòu)票,占用了這張票,同時(shí)通知系統(tǒng),我在購(gòu)買(mǎi)這張票,此時(shí)系統(tǒng)鎖定這張票一定時(shí)間。
當(dāng)消費(fèi)者購(gòu)買(mǎi)之后,就返回一個(gè)消息告訴系統(tǒng),該票已經(jīng)被買(mǎi),如果時(shí)間超過(guò)無(wú)需客戶(hù)端返回,系統(tǒng)自動(dòng)回收該票。
所以系統(tǒng)應(yīng)該存在對(duì)票這個(gè)對(duì)象具有存儲(chǔ)、銷(xiāo)售【對(duì)未銷(xiāo)售票的回收、發(fā)放功能】、向后臺(tái)反饋票是否被銷(xiāo)售以及銷(xiāo)售完成的功能。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java基本概念監(jiān)視器實(shí)習(xí)原理解析
這篇文章主要介紹了Java基本概念監(jiān)視器實(shí)習(xí)原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
Java線(xiàn)程中的ThreadLocal詳細(xì)分析
這篇文章主要介紹了Java線(xiàn)程中的ThreadLocal詳細(xì)分析,ThreadLocal?提供線(xiàn)程的局部變量,每個(gè)線(xiàn)程都可以通過(guò)?get()和?set()對(duì)局部變量進(jìn)行操作而不會(huì)對(duì)其他線(xiàn)程的局部變量產(chǎn)生影響,實(shí)現(xiàn)了線(xiàn)程之間的數(shù)據(jù)隔離,需要的朋友可以參考下2023-09-09
springboot項(xiàng)目使用Disruptor做內(nèi)部消息隊(duì)列的實(shí)現(xiàn)
本文主要介紹了springboot項(xiàng)目使用Disruptor做內(nèi)部消息隊(duì)列的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
java通過(guò)ssh連接服務(wù)器執(zhí)行shell命令詳解及實(shí)例
這篇文章主要介紹了java通過(guò)ssh連接服務(wù)器執(zhí)行shell命令詳解及實(shí)例方法的相關(guān)資料2017-02-02
IDEA使用MyBatisCodeHelperPro來(lái)generator代碼的詳細(xì)教程
這篇文章主要介紹了IDEA使用MyBatisCodeHelperPro來(lái)generator代碼的詳細(xì)教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
SpringBoot 使用Mongo的GridFs實(shí)現(xiàn)分布式文件存儲(chǔ)操作
這篇文章主要介紹了Spring Boot 使用Mongo的GridFs實(shí)現(xiàn)分布式文件存儲(chǔ)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
淺談Spring中的循環(huán)依賴(lài)問(wèn)題與解決方案
這篇文章主要介紹了淺談Spring中的循環(huán)依賴(lài)問(wèn)題與解決方案,循環(huán)依賴(lài)就是兩個(gè)或則兩個(gè)以上的bean互相持有對(duì)方,最終形成閉環(huán),比如A依賴(lài)于B,B依賴(lài)于C,C又依賴(lài)于A(yíng),需要的朋友可以參考下2023-12-12

