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

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

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

      安卓筆記俠

      專注安卓開發

      導航

      NoHttp封裝--06 NoHttp之隊列、隊列優先級

      public class Main {
      
          /**
           * 程序入口
           */
          public void start() {
              // 第一種,先進先出的隊列
              // YolandaLinkedQueue queue = new YolandaLinkedQueue(3);
              // queue.start();
              // 第二種,沒有順序的隊列
              YolandaQueue queue = new YolandaQueue(1);
              queue.start();
              // 往隊列中添加請求
              for (int i = 0; i < 20; i++) {
                  Request request = new Request("請求" + i);
                  if (i == 10)
                      request.setPriority(Priority.C);
                  if (i == 15)
                      request.setPriority(Priority.D);
                  queue.add(request);
              }
          }
      
          public static void main(String[] args) {
              Main main = new Main();
              main.start();
          }
      
      }
      
      public class YolandaLinkedQueue {
      
          private BlockingQueue<Request> blockingQueue;
      
          private TaskExecutor[] taskExecutors;
      
          public YolandaLinkedQueue(int poolSize) {
              // LinkedBlockingQueue是一個先進先出的隊列
              blockingQueue = new LinkedBlockingQueue<>();
              taskExecutors = new TaskExecutor[poolSize];
          }
      
          public void add(Request request) {
              blockingQueue.add(request);
          }
      
          public void start() {
              for (int i = 0; i < taskExecutors.length; i++) {
                  taskExecutors[i] = new TaskExecutor(blockingQueue);
                  taskExecutors[i].start();
              }
          }
      
          public void stop() {
              for (TaskExecutor taskExecutor : taskExecutors) {
                  taskExecutor.setRunning(false);
                  taskExecutor.interrupt();
              }
          }
      
      }
      
      public class YolandaQueue {
      
          private BlockingQueue<Request> blockingQueue;
      
          private TaskExecutor[] taskExecutors;
      
          private AtomicInteger atomicInteger = new AtomicInteger();
      
          public YolandaQueue(int poolSize) {
              // 如果Comparable#compareTo(Object)方法不做比較返回0,那么是無序的
              blockingQueue = new PriorityBlockingQueue<Request>();
              taskExecutors = new TaskExecutor[poolSize];
          }
      
          public void add(Request request) {
              request.setOrder(atomicInteger.incrementAndGet());
              blockingQueue.add(request);
          }
      
          public void start() {
              for (int i = 0; i < taskExecutors.length; i++) {
                  taskExecutors[i] = new TaskExecutor(blockingQueue);
                  taskExecutors[i].start();
              }
          }
      
          public void stop() {
              for (TaskExecutor taskExecutor : taskExecutors) {
                  taskExecutor.setRunning(false);
                  taskExecutor.interrupt();
              }
          }
      
      }
      
      public class TaskExecutor extends Thread {
      
          private BlockingQueue<Request> blockingQueue;
      
          private boolean isRunning = true;
      
          public TaskExecutor(BlockingQueue<Request> blockingQueue) {
              this.blockingQueue = blockingQueue;
          }
      
          /**
           * @param isRunning the isRunning to set
           */
          public void setRunning(boolean isRunning) {
              this.isRunning = isRunning;
          }
      
          @Override
          public void run() {
              while (isRunning) {
                  Request request = null;
                  try {
                      // take方法是一個阻塞的方法,每次調用會拿到隊列中的第一個任務,如果隊列為空,這個方法將一直阻塞,知道隊列中有任務再次返回
                      request = blockingQueue.take();
                  } catch (InterruptedException e) {
                      return;
                  }
                  try {
                      Thread.sleep(1000);
                  } catch (InterruptedException e) {
                      e.printStackTrace();
                  }
                  System.out.println(request.getName());
              }
          }
      
      }
      
      public class Request implements Comparable<Request> {
      
          private String name;
      
          private Priority mPriority = Priority.B;
      
          private int order;
      
          /**
           * @param name
           */
          public Request(String name) {
              super();
              this.name = name;
          }
      
          /**
           * @return the name
           */
          public String getName() {
              return name;
          }
      
          /**
           * @param name the name to set
           */
          public void setName(String name) {
              this.name = name;
          }
      
          /**
           * @param mPriority the mPriority to set
           */
          public void setPriority(Priority mPriority) {
              this.mPriority = mPriority;
          }
      
          /**
           * @return the mPriority
           */
          public Priority getPriority() {
              return mPriority;
          }
      
          /**
           * @return the order
           */
          public int getOrder() {
              return order;
          }
      
          /**
           * @param order the order to set
           */
          public void setOrder(int order) {
              this.order = order;
          }
      
          @Override
          public int compareTo(Request other) {
              // 返回正數代表1排在2后面,返回負數表示1排在2前面
              Priority priority = getPriority();// 拿到自身的優先級
              Priority otherPriority = other.getPriority();
              return priority == otherPriority ? getOrder() - other.getOrder() : otherPriority.ordinal() - priority.ordinal();
          }
      
      }
      
      public enum Priority {
      
          /**
           * 優先級最低
           */
          A,
      
          /**
           * 默認優先級
           */
          B,
      
          /**
           * 優先級最高
           */
          C,
      
          /**
           * 一般情況下不用;特殊情況下,請求假如到到隊列后立即執行
           */
          D
      
      }

       

       

      posted on 2018-05-14 22:50  安卓筆記俠  閱讀(442)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 成人深夜节目在线观看| 国产精品免费中文字幕| 老子午夜精品888无码不卡| 亚洲国产美女精品久久久| 久久热这里只有精品66| 精品国产美女福到在线不卡| 青草99在线免费观看| 亚洲人成网站色www| 久久热这里只有精品66| 国产精品国产三级国快看| 亚洲人妻精品中文字幕| 在线天堂最新版资源| 亚洲AV午夜电影在线观看| 亚洲国产精品日韩av专区| 色噜噜狠狠成人综合| 国产99在线 | 欧美| 欧美成人猛片aaaaaaa| 日本道高清一区二区三区| 成人无码潮喷在线观看| 亚洲成年轻人电影网站WWW| 日韩高清不卡免费一区二区| 久久青青草原精品国产app| 她也色tayese在线视频| 浓毛老太交欧美老妇热爱乱| 女同性恋一区二区三区视频| 亚洲美免无码中文字幕在线| 高清无码爆乳潮喷在线观看| 99久久婷婷国产综合精品青草漫画| 巨胸不知火舞露双奶头无遮挡| 久青草视频在线观看免费| 国产做无码视频在线观看浪潮| 天堂av成人网在线观看| 最近中文字幕日韩有码| 精品免费看国产一区二区| 色噜噜在线视频免费观看| 日韩大片高清播放器| 熟妇的味道hd中文字幕| 无码国产偷倩在线播放| 精品一区二区中文字幕| 久久精品熟女亚洲av麻| 亚洲高清aⅴ日本欧美视频|