中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Java中利用多線程搶票

發布時間:2021-05-27 18:19:25 來源:億速云 閱讀:267 作者:Leah 欄目:編程語言

怎么在Java中利用多線程搶票?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

局部變量:

  •   定義在方法內,方法運行存在,方法運行結束銷毀,無法保存一個持久化數據!!!

成員變量:

  •   保存在類對象內,創建對象之后存在,對象不銷毀成員變量也不會被內存收回。因為

  •   在每一個類對象中,都存在一個對應的成員變量,這些成員變量不是同一個數據。不是

  •   共享資源,不合適!!!

靜態成員變量:

  •   保存在內存的【數據區】,類文件加載時就存在,并且可以給每一個類對象使用,一處修改

  •   處處受影響!!!作為共享資源非常合適!!!

問題

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();
 }
}

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桐城市| 四子王旗| 璧山县| 社旗县| 古交市| 桐柏县| 会泽县| 马关县| 嘉义市| 噶尔县| 莆田市| 灵宝市| 康保县| 汕头市| 宜黄县| 琼结县| 文昌市| 丹江口市| 广丰县| 邵阳县| 鱼台县| 依安县| 陆河县| 镇赉县| 徐闻县| 恩施市| 工布江达县| 环江| 阜康市| 沙湾县| 马边| 定兴县| 江华| 曲麻莱县| 镇雄县| 沈丘县| 丰县| 普兰县| 当阳市| 高邮市| 北辰区|