一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java多線程并發開發之DelayQueue使用示例

Java多線程并發開發之DelayQueue使用示例

2021-01-06 11:01生活半篇記 Java教程

這篇文章主要為大家詳細介紹了Java多線程并發開發之DelayQueue使用示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下

在學習Java 多線程并發開發過程中,了解到DelayQueue類的主要作用:是一個無界的BlockingQueue,用于放置實現了Delayed接口的對象,其中的對象只能在其到期時才能從隊列中取走。這種隊列是有序的,即隊頭對象的延遲到期時間最長。注意:不能將null元素放置到這種隊列中。

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
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 ? 1 :(endTime - s.endTime == 0 ? 0 : -1);
  }
}

運行的結果如下:

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/WangHaiMing/p/7550601.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91久久偷偷做嫩草影院电 | 亚洲无线一二三四区 | 国产一级特黄在线播放 | 四虎一区 | 男生同性啪视频在线观看 | 成人在线观看免费视频 | 果冻传媒在线完整免费观 | 四虎永久免费地址在线网站 | 涩情主播在线翻车 | 全黄一级裸片视频免费 | 男人天堂日韩 | 欧美日韩精品一区二区三区视频在线 | 午夜十八岁禁 | 亚洲国产成人久久综合一区 | 精品一区二区视频 | 成人综合网址 | poverty中国老妇人 | 丝袜老师好湿好紧我要进去了 | 91精品久久国产青草 | 超级乱淫伦短篇在车上 | 精品一区二区三区免费站 | 女教师被女同学调教成脚奴 | 韩国理论三级在线观看视频 | 91精品国产麻豆国产自产在线 | 1024视频色版在线网站 | 特级一级全黄毛片免费 | 国产一区二区在线观看视频 | 亚洲老头老太hd | 九九九九九九伊人 | 99久久免费国内精品 | 800精品国产导航 | 欧美肥乳 | 日本噜噜影院 | 国产成人无精品久久久久国语 | 99精品网 | 亚洲AV久久无码精品九九软件 | 欧美黑人成人免费全部 | 二区三区在线观看 | 婷婷在线综合 | 欧美a一级片 | 男人久久天堂 |