亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

DelayQueue怎么在Java多線程并發開發中使用

發布時間:2020-12-05 17:29:31 來源:億速云 閱讀:130 作者:Leah 欄目:編程語言

這篇文章給大家介紹DelayQueue怎么在Java多線程并發開發中使用,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

Delayed,一種混合風格的接口,用來標記那些應該在給定延遲時間之后執行的對象。此接口的實現必須定義一個 compareTo 方法,該方法提供與此接口的 getDelay 方法一致的排序。

在網上看到了一些示例,發現有的示例存在一些問題,做了些修改,希望能幫助大家理解。

中國人都喜歡K歌,大部分人的內心都住著一個歌手的夢,尤其是學生時代,大家都喜歡組團去KTV唱歌,一唱一下午,大家都唱得很爽。話說又到了一年一度的雙11,許多的單身狗開始組團來到KTV唱歌。那么KTV這個時候如何通過程序來收費記時的呢,模擬的代碼如下:

public class KTV implements Runnable{
  private DelayQueue<KTVConsumer> queue = new DelayQueue<>();

  public void begin(String name,String boxNum,int money){

    KTVConsumer man = new KTVConsumer(name,boxNum,20l*money+System.currentTimeMillis());
    System.out.println(man.getName()+" 等人交了"+money+"元錢,進入"+man.getBoxNum()+"號包廂,開始K歌...");
    this.queue.add(man);
  }

  public void end(KTVConsumer man){
    System.out.println(man.getName()+" 等人所在的"+man.getBoxNum()+"號包廂,時間到...");
  }

  @Override
  public void run() {
    // TODO Auto-generated method stub
    while(true){
      try {
        KTVConsumer man = queue.take();
        end(man);
      } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
  }

  public static void main(String args[]){
    try{
      System.out.println("KTV正常營業");
      System.out.println("================================");
      KTV ktv = new KTV();
      Thread sing = new Thread(ktv);
      sing.start();
      new Thread(new Runnable() {
        @Override
        public void run() {
          ktv.begin("張三", "111", 500);
        }
      }).start();

      new Thread(new Runnable() {
        @Override
        public void run() {
          ktv.begin("李四", "666", 200);
        }
      }).start();

      Thread.sleep(2000);
      new Thread(new Runnable() {
        @Override
        public void run() {
          ktv.begin("王五", "888", 100);
          System.out.println("================================");
        }
      }).start();

    }
    catch(Exception ex){

    }

  }
}
public class KTVConsumer implements Delayed{
  private String name;
  //截止時間
  private long endTime;
  //包廂號
  private String boxNum;

  public KTVConsumer(String name,String boxNum,long endTime){
    this.name=name;
    this.boxNum=boxNum;
    this.endTime=endTime;
  }

  public String getName(){
    return this.name;
  }

  public String getBoxNum(){
    return this.boxNum;
  }

  /**
   * 用來判斷是否到了截止時間
   */
  @Override
  public long getDelay(TimeUnit unit) {
    // TODO Auto-generated method stub
    return unit.convert(endTime - System.currentTimeMillis(), TimeUnit.MILLISECONDS);
  }

  /**
   * 相互比較排序用
   */
  @Override
  public int compareTo(Delayed o) {
    // TODO Auto-generated method stub
    if(o == null || ! (o instanceof KTVConsumer)) return 1;
    if(o == this) return 0;
    KTVConsumer s = (KTVConsumer)o;
    return endTime - s.endTime > 0 &#63; 1 :(endTime - s.endTime == 0 &#63; 0 : -1);
  }
}

運行的結果如下:

KTV正常營業
================================
張三 等人交了500元錢,進入111號包廂,開始K歌...
李四 等人交了200元錢,進入666號包廂,開始K歌...
王五 等人交了100元錢,進入888號包廂,開始K歌...
================================
李四 等人所在的666號包廂,時間到...
王五 等人所在的888號包廂,時間到...
張三 等人所在的111號包廂,時間到...

關于DelayQueue怎么在Java多線程并發開發中使用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

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

AI

唐河县| 泰顺县| 义乌市| 福贡县| 比如县| 廉江市| 抚顺市| 油尖旺区| 当涂县| 石河子市| 泊头市| 新津县| 文水县| 卢湾区| 雅安市| 屏东市| 左云县| 台州市| 杨浦区| 阳西县| 子长县| 大名县| 沭阳县| 彭泽县| 壶关县| 绥滨县| 二手房| 陈巴尔虎旗| 合江县| 长乐市| 探索| 平昌县| 东宁县| 伽师县| 丁青县| 平阳县| 宜兰市| 金坛市| 阿图什市| 双牌县| 宁河县|