zoukankan      html  css  js  c++  java
  • BlockingQueue实现阻塞队列

     1 import java.util.concurrent.ArrayBlockingQueue;
     2 import java.util.concurrent.BlockingQueue;
     3 
     4 public class BlockingQueueTest {
     5     public static void main(String[] args) {
     6         final BlockingQueue queue = new ArrayBlockingQueue(3); //队列长度
     7         for(int i=0;i<2;i++){
     8             new Thread(){
     9                 public void run(){
    10                     while(true){
    11                         try {
    12                             Thread.sleep((long)(Math.random()*1000));
    13                             System.out.println(Thread.currentThread().getName() + "准备放数据!");                            
    14                             queue.put(1); //放数据
    15                             System.out.println(Thread.currentThread().getName() + "已经放了数据," +                             
    16                                         "队列目前有" + queue.size() + "个数据");
    17                         } catch (InterruptedException e) {
    18                             e.printStackTrace();
    19                         }
    20 
    21                     }
    22                 }
    23                 
    24             }.start();
    25         }
    26         
    27         new Thread(){
    28             public void run(){
    29                 while(true){
    30                     try {
    31                         //将此处的睡眠时间分别改为100和1000,观察运行结果
    32                         Thread.sleep(1000);
    33                         System.out.println(Thread.currentThread().getName() + "准备取数据!");
    34                         queue.take(); //取数据
    35                         System.out.println(Thread.currentThread().getName() + "已经取走数据," +                             
    36                                 "队列目前有" + queue.size() + "个数据");                    
    37                     } catch (InterruptedException e) {
    38                         e.printStackTrace();
    39                     }
    40                 }
    41             }
    42             
    43         }.start();            
    44     }
    45 }
    测试如下:

    Thread-1准备放数据! Thread-1已经放了数据,队列目前有1个数据 Thread-0准备放数据! Thread-0已经放了数据,队列目前有2个数据 Thread-2准备取数据! Thread-2已经取走数据,队列目前有1个数据 Thread-1准备放数据! Thread-1已经放了数据,队列目前有2个数据 Thread-0准备放数据! Thread-0已经放了数据,队列目前有3个数据 Thread-1准备放数据!
  • 相关阅读:
    【数学】三分法
    【数学】【背包】【NOIP2018】P5020 货币系统
    【数学】【CF27E】 Number With The Given Amount Of Divisors
    【单调队列】【P3957】 跳房子
    【极值问题】【CF33C】 Wonderful Randomized Sum
    【DP】【CF31E】 TV Game
    【神仙题】【CF28D】 Don't fear, DravDe is kind
    【线段树】【CF19D】 Points
    【字符串】KMP字符串匹配
    【二维树状数组】【CF10D】 LCIS
  • 原文地址:https://www.cnblogs.com/wwzyy/p/6793031.html
Copyright © 2011-2022 走看看