Java模擬多線程實(shí)現(xiàn)搶票代碼實(shí)例
這篇文章主要介紹了Java模擬多線程實(shí)現(xiàn)搶票,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
實(shí)現(xiàn)100張票搶購(gòu)的demo
這里需要一個(gè)變量,來(lái)保存100張
局部變量:
- 定義在方法內(nèi),方法運(yùn)行存在,方法運(yùn)行結(jié)束銷(xiāo)毀,無(wú)法保存一個(gè)持久化數(shù)據(jù)?。?!
成員變量:
- 保存在類(lèi)對(duì)象內(nèi),創(chuàng)建對(duì)象之后存在,對(duì)象不銷(xiāo)毀成員變量也不會(huì)被內(nèi)存收回。因?yàn)?/li>
- 在每一個(gè)類(lèi)對(duì)象中,都存在一個(gè)對(duì)應(yīng)的成員變量,這些成員變量不是同一個(gè)數(shù)據(jù)。不是
- 共享資源,不合適!??!
靜態(tài)成員變量:
- 保存在內(nèi)存的【數(shù)據(jù)區(qū)】,類(lèi)文件加載時(shí)就存在,并且可以給每一個(gè)類(lèi)對(duì)象使用,一處修改
- 處處受影響?。?!作為共享資源非常合適?。。?/li>
問(wèn)題
1. 銷(xiāo)售順序存在異常
2. 存在某一張票被銷(xiāo)售了多次
使用鎖
代碼如下
class SaleThread implements Runnable {
/**
* 使用靜態(tài)成員變量作為100張票的保存變量,是一個(gè)共享資源。
*/
private static int tickets = 100;
@Override
public void run() {
// 完成售票過(guò)程
while (true) {
/*
字符串可以作為鎖對(duì)象,因?yàn)殡p引號(hào)包含的字符串不管在代碼中如何運(yùn)行,有且只有一個(gè)
*/
synchronized ("鎖") {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (tickets > 0) {
System.out.println(Thread.currentThread().getName() + "售出了" + tickets + "張票");
tickets--;
} else {
System.out.println(Thread.currentThread().getName() + "售罄!??!");
break;
}
}
}
}
}
public class Demo {
public static void main(String[] args) {
Thread t1 = new Thread(new SaleThread(), "售票人員1");
Thread t2 = new Thread(new SaleThread(), "售票人員2");
Thread t3 = new Thread(new SaleThread(), "售票人員3");
t1.start();
t2.start();
t3.start();
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
如何通過(guò)源碼了解Java的自動(dòng)裝箱拆箱詳解
裝箱就是把基本類(lèi)型轉(zhuǎn)換成包裝類(lèi),拆箱就是把包裝類(lèi)轉(zhuǎn)換成基本類(lèi)型,下面這篇文章主要給大家介紹了關(guān)于如何通過(guò)源碼了解Java的自動(dòng)裝箱拆箱的相關(guān)資料,需要的朋友可以參考下2022-04-04
SpringBoot實(shí)現(xiàn)短信驗(yàn)證碼校驗(yàn)方法思路詳解
最近做項(xiàng)目遇到這樣的需求,前端是基于BootStrap,html代碼中有BootStrap樣式實(shí)現(xiàn)的,具體后臺(tái)實(shí)現(xiàn)代碼大家通過(guò)本文一起學(xué)習(xí)吧2017-08-08
SpringBoot+MybatisPlus+Mysql+JSP實(shí)戰(zhàn)
這篇文章主要介紹了SpringBoot+MybatisPlus+Mysql+JSP實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Java使用itextpdf實(shí)現(xiàn)Excel轉(zhuǎn)PDF
這篇文章主要為大家詳細(xì)介紹了Java如何使用itextpdf實(shí)現(xiàn)Excel轉(zhuǎn)PDF,并且支持xlsx和xls兩種格,文中的示例代碼講解詳細(xì),希望對(duì)大家有所幫助2024-01-01
Spring中@Service注解的作用與@Controller和@RestController之間區(qū)別
這篇文章主要介紹了Spring中@Service注解的作用與@Controller和@RestController之間的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-03-03
實(shí)例詳解Java庫(kù)中的LocalDate類(lèi)
在做報(bào)表統(tǒng)計(jì)時(shí),需要對(duì)指定時(shí)間內(nèi)的數(shù)據(jù)做統(tǒng)計(jì),則需要使用到時(shí)間日期API,下面這篇文章主要給大家介紹了關(guān)于Java庫(kù)中LocalDate類(lèi)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01
關(guān)于SpringBoot攔截器中Bean無(wú)法注入的問(wèn)題
這兩天遇到SpringBoot攔截器中Bean無(wú)法注入問(wèn)題。下面介紹關(guān)于SpringBoot攔截器中Bean無(wú)法注入的問(wèn)題,感興趣的朋友一起看看吧2021-10-10

