<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      java阻塞隊列

      對消息的處理有些麻煩,要保證各種確認。為了確保消息的100%發送成功,筆者在之前的基礎上做了一些改進。其中要用到多線程,用于重復發送信息。

      所以查了很多關于線程安全的東西,也看到了阻塞隊列,發現這個模式很不錯,可惜我目前用不到。

      關于這個的講解已經很多了,阻塞這個,就是當隊列中沒有數據的時候,線程讀取的話會等待。當隊列中的數據滿的時候,線程添加數據的時候,也會等待。

      有個例子很生動形象,往盤子里面放雞蛋,只能放固定數目的。盤子里面沒有雞蛋,無法從中拿出來。當盤子里滿了,也放不進去。直到被拿出去才能在放。

      代碼如下,這里設置的是一個盤子最多放10個雞蛋:

      package com.thread.two;
      
      import java.util.ArrayList;
      import java.util.List;
      
      public class Plate {
          List<Object> eggs=new ArrayList<Object>();public synchronized Object getEgg(){while(eggs.size()==0){
                  try {
                      wait();
                  } catch (InterruptedException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
              }
              Object egg=null;
              for (int i = 0; i < 10; i++) {
                  egg=eggs.get(i);
                  System.out.println("拿到雞蛋.........");
              }
              //Object egg=eggs.get(0);
              eggs.clear();
              notify();
              //System.out.println("拿到雞蛋.........");
              return egg;
          }
          
          public synchronized void putEgg(Object egg){
      while(eggs.size()>9){
                  try {
                      wait();
                  } catch (InterruptedException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
              }
              eggs.add(egg);
              notify();
              System.out.println("放入雞蛋.........");
          }
          
          static class AddThread extends Thread{
              private Plate plate;
              private Object egg=new Object();
              public AddThread(Plate plate){
                  this.plate=plate;
              }
              public void run(){
                  for (int i = 0; i < 1000; i++) {
                      plate.putEgg(egg);
                  }
              }
          }
          
          static class GetThread extends Thread{
              private Plate plate;
              public GetThread(Plate plate){
                  this.plate=plate;
              }
              public void run(){
                  for (int i = 0; i < 1000; i++) {
                      plate.getEgg();
                  }
              }
          }
          
          public static void main(String[] args) throws InterruptedException {
              Plate plate=new Plate();
              Thread add=new Thread(new AddThread(plate));
              Thread get=new Thread(new GetThread(plate));
              add.start();
              get.start();
              add.join();
              get.join();
              System.out.println("測試結束");
          }
          
      }

      這個例子很形象,用線程實現了上面所說的。

      java現在有concurrent包,里面有很多現成的可以用的類,很多是線程安全的,這樣,像上面寫的put或者get,都不需要自己寫同步方法了,這些類已經包裝好了。

      這里有一個ArrayBlockingQueue的例子,和上面實現的差不多。

      首先是兩個線程,分別是put和get。

      ThreadPut:

      package com.thread.three;
      
      import java.util.concurrent.ArrayBlockingQueue;
      
      public class ThreadPut implements Runnable{
          private ArrayBlockingQueue<String> abq=null;
          public ThreadPut(ArrayBlockingQueue<String> abq){
              this.abq=abq;
          }
          public void run() {
              // TODO Auto-generated method stub
              while(true){
                  System.out.println("要向隊列中存數據了");
                  try {
                      Thread.sleep(1000);
                      abq.put("hi");
                      System.out.println("存入后,數據一共為:"+abq.size());
                  } catch (InterruptedException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
              }
          }
      }

      ThreadGet:

      package com.thread.three;
      
      import java.util.concurrent.ArrayBlockingQueue;
      
      public class ThreadGet extends Thread {
          ArrayBlockingQueue<String> abq=null;
          public ThreadGet(ArrayBlockingQueue<String> abq){
              this.abq=abq;
          }
          @Override
          public void run() {
              // TODO Auto-generated method stub
              while(true){
                  try {
                      Thread.sleep(2000);
                  } catch (InterruptedException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
                  System.out.println("我要從隊列中取數據了");
                  String msg=null;
                  if (abq.size()>0) {
                      msg=abq.remove();
                  }
                  System.out.println("隊列中取得的數據為:"+msg+",隊列中還有一共:"+abq.size());
              }
          }
      }

      測試類:

      public class ArrayBlockQueueApp {
          
          public static void main(String[] args) {
              ExecutorService  es=Executors.newCachedThreadPool();
              ArrayBlockingQueue<String> abq=new ArrayBlockingQueue<String>(10);
              ThreadGet tGet=new ThreadGet(abq);
              Thread tPut=new Thread(new ThreadPut(abq));
              es.execute(tGet);
              es.execute(tPut);
          }
      }

      這些隊列放消息的話挺不錯的。

       

      posted @ 2014-08-19 16:21  薛定諤的貓_  閱讀(2537)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 免费乱理伦片在线观看| 国产绿帽在线视频看| 十八禁午夜福利免费网站| 亚洲男人第一无码av网站| 国产女人喷潮视频免费| 欧美性插b在线视频网站| 天堂网av一区二区三区| 中日韩中文字幕一区二区| 久久精品免视看国产成人| 2018年亚洲欧美在线v| 又湿又紧又大又爽A视频男| 国产AV巨作丝袜秘书| 免费人成视频在线观看不卡| 久久热这里这里只有精品| 国产福利社区一区二区| 亚洲色成人网站www永久四虎| 日本欧洲亚洲高清在线| 在线高清免费不卡全码| 国产999久久高清免费观看| 亚洲国产精品综合久久网络| 欧美人与动欧交视频| 金溪县| 又湿又紧又大又爽A视频男| 久9视频这里只有精品| 国产精品国三级国产av| 麻豆一区二区中文字幕| 国产成人午夜福利高清在线观看| 白丝乳交内射一二三区| 天天做天天爱夜夜夜爽毛片| 国产精品v片在线观看不卡| 国产精品午夜福利在线观看 | 国产亚洲精品久久综合阿香| 人妻在线无码一区二区三区| 91中文字幕在线一区| 亚洲v欧美v日韩v国产v| 99精品高清在线播放| jk白丝喷浆| 日本五十路熟女一区二区| 日韩一区国产二区欧美三区| 国产精品三级中文字幕| 成年女人喷潮免费视频|