最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java多線程并發(fā)開發(fā)之DelayQueue使用示例

 更新時間:2017年09月19日 17:13:38   作者:生活半篇記  
這篇文章主要為大家詳細介紹了Java多線程并發(fā)開發(fā)之DelayQueue使用示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

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

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

中國人都喜歡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正常營業(yè)");
      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);
  }
}

運行的結果如下:

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

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

相關文章

  • java?9大性能優(yōu)化經驗總結

    java?9大性能優(yōu)化經驗總結

    這篇文章主要介紹了java?9大性能優(yōu)化經驗總結,包括:Java代碼優(yōu)化,數(shù)據(jù)庫優(yōu)化,分布式緩存,異步化,Web前段,搜索引擎優(yōu)化等需要的朋友可以參考下
    2023-02-02
  • SpringSecurity學習之自定義過濾器的實現(xiàn)代碼

    SpringSecurity學習之自定義過濾器的實現(xiàn)代碼

    這篇文章主要介紹了SpringSecurity學習之自定義過濾器的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-01-01
  • Spring Boot中的SpringSecurity基礎教程

    Spring Boot中的SpringSecurity基礎教程

    Spring Security是一個功能強大且高度可定制的身份驗證和訪問控制框架。它實際上是保護基于spring的應用程序的標準Spring Security是一個框架,側重于為Java應用程序提供身份驗證和授權,這篇文章主要介紹了Spring Boot中的SpringSecurity學習,需要的朋友可以參考下
    2023-01-01
  • java.lang.InterruptedException異常的問題解決

    java.lang.InterruptedException異常的問題解決

    本文主要介紹了java.lang.InterruptedException異常的問題解決,這種異常通常意味著 Jenkins 任務在執(zhí)行過程中被中斷,這可能會導致任務失敗或中止,下面就來介紹一下解決方法,感興趣的可以了解一下
    2024-07-07
  • Java Reflect如何利用反射獲取屬性上的注解

    Java Reflect如何利用反射獲取屬性上的注解

    AnnotatedElement接口是Java反射機制的一部分,用于讀取運行中程序的注釋信息,通過getAnnotation、getAnnotations、isAnnotationPresent和getDeclaredAnnotations方法,可以訪問和判斷注解,Field類實現(xiàn)了該接口
    2024-09-09
  • Java中BufferedReader類獲取輸入輸入字符串實例

    Java中BufferedReader類獲取輸入輸入字符串實例

    這篇文章主要介紹了Java中BufferedReader類獲取輸入輸入字符串實例,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • Mybatis傳單個參數(shù)和<if>標簽同時使用的問題及解決方法

    Mybatis傳單個參數(shù)和<if>標簽同時使用的問題及解決方法

    這篇文章主要介紹了Mybatis傳單個參數(shù)和<if>標簽同時使用的問題及解決方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-05-05
  • Java實現(xiàn)平滑加權輪詢算法之降權和提權詳解

    Java實現(xiàn)平滑加權輪詢算法之降權和提權詳解

    所有負載均衡的場景幾乎都會用到這個平滑加權輪詢算法,下面這篇文章主要給大家介紹了關于Java實現(xiàn)平滑加權輪詢算法之降權和提權的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • Java數(shù)據(jù)結構中堆的向下和向上調整解析

    Java數(shù)據(jù)結構中堆的向下和向上調整解析

    堆是一顆完全二叉樹,在這棵樹中,所有父節(jié)點都滿足大于等于其子節(jié)點的堆叫大根堆,所有父節(jié)點都滿足小于等于其子節(jié)點的堆叫小根堆。堆雖然是一顆樹,但是通常存放在一個數(shù)組中,父節(jié)點和孩子節(jié)點的父子關系通過數(shù)組下標來確定
    2021-11-11
  • 利用Netty+SpringBoot實現(xiàn)定時后端向前端推送數(shù)據(jù)

    利用Netty+SpringBoot實現(xiàn)定時后端向前端推送數(shù)據(jù)

    這篇文章主要介紹了BIO、NIO、AIO三種Java?IO模型,并探討了如何使用Spring?Boot集成Netty實現(xiàn)后臺向前端推送信息的功能,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-01-01

最新評論

青铜峡市| 建昌县| 衡阳县| 离岛区| 北辰区| 华安县| 梧州市| 台前县| 伊春市| 天祝| 个旧市| 永顺县| 铜陵市| 固阳县| 谢通门县| 神农架林区| 武宣县| 祁阳县| 武安市| 长顺县| 靖安县| 武乡县| 桑日县| 嘉兴市| 福泉市| 张家口市| 华宁县| 沈阳市| 登封市| 巴青县| 平谷区| 海口市| 明星| 阜南县| 阳朔县| 玛曲县| 菏泽市| 奉节县| 精河县| 阳原县| 长子县|