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ù)。不是
- 共享資源,不合適!??!
靜態(tài)成員變量:
- 保存在內(nèi)存的【數(shù)據(jù)區(qū)】,類文件加載時就存在,并且可以給每一個類對象使用,一處修改
- 處處受影響?。?!作為共享資源非常合適?。?!
問題
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集成PageHelper分頁失效的原因及解決
項目啟動初期,在集成mybatis的分頁插件,自定義封裝了一個分頁的工具類,方便后期項目的擴展,結(jié)果無法分頁了,怎么設(shè)置搞都沒辦法正常分頁,所以本文將給大家介紹一下springboot集成PageHelper分頁失效的原因及解決,需要的朋友可以參考下2023-10-10SpringCloud Netflix Ribbon源碼解析(推薦)
這篇文章主要介紹了SpringCloud Netflix Ribbon源碼解析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03SpringBoot EasyPoi動態(tài)導(dǎo)入導(dǎo)出的兩種方式實現(xiàn)方法詳解
項目里使用的是EasyPoi來處理導(dǎo)入導(dǎo)出功能的。近日因業(yè)務(wù)需求調(diào)整,一些導(dǎo)出功能的導(dǎo)出列需要根據(jù)不同的條件動態(tài)導(dǎo)出2022-09-09詳解SpringBoot2 使用Spring Session集群
這篇文章主要介紹了SpringBoot2 使用Spring Session集群,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值 ,需要的朋友可以參考下2019-04-04Spring MVC 請求參數(shù)綁定實現(xiàn)方式
Spring MVC 是一個用于構(gòu)建 Web 應(yīng)用程序的框架,它提供了一種方便的方式來處理 HTTP 請求和響應(yīng),Spring MVC 提供了多種方式來實現(xiàn)請求參數(shù)綁定,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),需要的朋友跟隨小編一起看看吧2023-09-09