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准备放数据!
  • 相关阅读:
    ISCC 2018——write up
    图的存储结构(十字链表、邻接多重表、边集数组)
    图的存储结构
    树梅派(Raspberry Pi 3b)安装kali linux 2.0
    树梅派3B kali2.0 启用SSH进行远程登录
    VS+VAssistX自动添加注释
    libtiff库使用
    word采用尾注进行参考文献排版的一些问题
    vs2008安装opencv2.4.6
    Altera CYCLONE III FPGA BGA布线
  • 原文地址:https://www.cnblogs.com/wwzyy/p/6793031.html
Copyright © 2011-2022 走看看