Java模擬多線程實(shí)現(xiàn)搶票代碼實(shí)例
這篇文章主要介紹了Java模擬多線程實(shí)現(xiàn)搶票,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
實(shí)現(xiàn)100張票搶購(gòu)的demo
這里需要一個(gè)變量,來保存100張
局部變量:
- 定義在方法內(nèi),方法運(yùn)行存在,方法運(yùn)行結(jié)束銷毀,無法保存一個(gè)持久化數(shù)據(jù)!??!
成員變量:
- 保存在類對(duì)象內(nèi),創(chuàng)建對(duì)象之后存在,對(duì)象不銷毀成員變量也不會(huì)被內(nèi)存收回。因?yàn)?/li>
- 在每一個(gè)類對(duì)象中,都存在一個(gè)對(duì)應(yīng)的成員變量,這些成員變量不是同一個(gè)數(shù)據(jù)。不是
- 共享資源,不合適?。?!
靜態(tài)成員變量:
- 保存在內(nèi)存的【數(shù)據(jù)區(qū)】,類文件加載時(shí)就存在,并且可以給每一個(gè)類對(duì)象使用,一處修改
- 處處受影響?。?!作為共享資源非常合適?。?!
問題
1. 銷售順序存在異常
2. 存在某一張票被銷售了多次
使用鎖
代碼如下
class SaleThread implements Runnable { /** * 使用靜態(tài)成員變量作為100張票的保存變量,是一個(gè)共享資源。 */ private static int tickets = 100; @Override public void run() { // 完成售票過程 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)文章
springboot集成PageHelper分頁(yè)失效的原因及解決
項(xiàng)目啟動(dòng)初期,在集成mybatis的分頁(yè)插件,自定義封裝了一個(gè)分頁(yè)的工具類,方便后期項(xiàng)目的擴(kuò)展,結(jié)果無法分頁(yè)了,怎么設(shè)置搞都沒辦法正常分頁(yè),所以本文將給大家介紹一下springboot集成PageHelper分頁(yè)失效的原因及解決,需要的朋友可以參考下2023-10-10SpringCloud Netflix Ribbon源碼解析(推薦)
這篇文章主要介紹了SpringCloud Netflix Ribbon源碼解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03SpringBoot EasyPoi動(dòng)態(tài)導(dǎo)入導(dǎo)出的兩種方式實(shí)現(xiàn)方法詳解
項(xiàng)目里使用的是EasyPoi來處理導(dǎo)入導(dǎo)出功能的。近日因業(yè)務(wù)需求調(diào)整,一些導(dǎo)出功能的導(dǎo)出列需要根據(jù)不同的條件動(dòng)態(tài)導(dǎo)出2022-09-09Feign如何實(shí)現(xiàn)第三方的HTTP請(qǐng)求
這篇文章主要介紹了Feign如何實(shí)現(xiàn)第三方的HTTP請(qǐng)求,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10詳解SpringBoot2 使用Spring Session集群
這篇文章主要介紹了SpringBoot2 使用Spring Session集群,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-04-04Spring MVC 請(qǐng)求參數(shù)綁定實(shí)現(xiàn)方式
Spring MVC 是一個(gè)用于構(gòu)建 Web 應(yīng)用程序的框架,它提供了一種方便的方式來處理 HTTP 請(qǐng)求和響應(yīng),Spring MVC 提供了多種方式來實(shí)現(xiàn)請(qǐng)求參數(shù)綁定,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友跟隨小編一起看看吧2023-09-09