Java模擬多線程實現(xiàn)搶票代碼實例
這篇文章主要介紹了Java模擬多線程實現(xiàn)搶票,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
實現(xiàn)100張票搶購的demo
這里需要一個變量,來保存100張
局部變量:
- 定義在方法內(nèi),方法運行存在,方法運行結(jié)束銷毀,無法保存一個持久化數(shù)據(jù)?。?!
成員變量:
- 保存在類對象內(nèi),創(chuàng)建對象之后存在,對象不銷毀成員變量也不會被內(nèi)存收回。因為
- 在每一個類對象中,都存在一個對應(yīng)的成員變量,這些成員變量不是同一個數(shù)據(jù)。不是
- 共享資源,不合適?。。?/li>
靜態(tài)成員變量:
- 保存在內(nèi)存的【數(shù)據(jù)區(qū)】,類文件加載時就存在,并且可以給每一個類對象使用,一處修改
- 處處受影響?。?!作為共享資源非常合適?。。?/li>
問題
1. 銷售順序存在異常
2. 存在某一張票被銷售了多次
使用鎖
代碼如下
class SaleThread implements Runnable {
/**
* 使用靜態(tài)成員變量作為100張票的保存變量,是一個共享資源。
*/
private static int tickets = 100;
@Override
public void run() {
// 完成售票過程
while (true) {
/*
字符串可以作為鎖對象,因為雙引號包含的字符串不管在代碼中如何運行,有且只有一個
*/
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();
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot實現(xiàn)短信驗證碼校驗方法思路詳解
最近做項目遇到這樣的需求,前端是基于BootStrap,html代碼中有BootStrap樣式實現(xiàn)的,具體后臺實現(xiàn)代碼大家通過本文一起學(xué)習(xí)吧2017-08-08
SpringBoot+MybatisPlus+Mysql+JSP實戰(zhàn)
這篇文章主要介紹了SpringBoot+MybatisPlus+Mysql+JSP實戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Java使用itextpdf實現(xiàn)Excel轉(zhuǎn)PDF
這篇文章主要為大家詳細(xì)介紹了Java如何使用itextpdf實現(xiàn)Excel轉(zhuǎn)PDF,并且支持xlsx和xls兩種格,文中的示例代碼講解詳細(xì),希望對大家有所幫助2024-01-01
Spring中@Service注解的作用與@Controller和@RestController之間區(qū)別
這篇文章主要介紹了Spring中@Service注解的作用與@Controller和@RestController之間的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-03-03
關(guān)于SpringBoot攔截器中Bean無法注入的問題
這兩天遇到SpringBoot攔截器中Bean無法注入問題。下面介紹關(guān)于SpringBoot攔截器中Bean無法注入的問題,感興趣的朋友一起看看吧2021-10-10

