您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么用Java模擬多線程實現搶票代碼”,在日常操作中,相信很多人在怎么用Java模擬多線程實現搶票代碼問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用Java模擬多線程實現搶票代碼”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
實現100張票搶購的demo
這里需要一個變量,來保存100張
局部變量:
定義在方法內,方法運行存在,方法運行結束銷毀,無法保存一個持久化數據!!!
成員變量:
保存在類對象內,創建對象之后存在,對象不銷毀成員變量也不會被內存收回。因為 在每一個類對象中,都存在一個對應的成員變量,這些成員變量不是同一個數據。不是 共享資源,不合適!!!
靜態成員變量:
保存在內存的【數據區】,類文件加載時就存在,并且可以給每一個類對象使用,一處修改 處處受影響!!!作為共享資源非常合適!!!
問題
1. 銷售順序存在異常
2. 存在某一張票被銷售了多次
使用鎖
代碼如下
class SaleThread implements Runnable { /** * 使用靜態成員變量作為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(); }}
到此,關于“怎么用Java模擬多線程實現搶票代碼”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。