1 package unit; 2 3 import java.util.concurrent.ArrayBlockingQueue; 4 5 /** 6 * 阻塞队列 7 * @author 54304 8 * 9 */ 10 public class BlockingQueue { 11 private int queueSize = 10; 12 private ArrayBlockingQueue<Integer> queue = new ArrayBlockingQueue<Integer>(queueSize); 13 int m = 0; 14 int n = 0; 15 int k = 0; 16 public static void main(String[] args) throws InterruptedException { 17 BlockingQueue test = new BlockingQueue(); 18 Producer producer = test.new Producer(); 19 Consumer consumer = test.new Consumer(); 20 21 producer.start(); 22 consumer.start(); 23 } 24 25 class Consumer extends Thread{ 26 27 @Override 28 public void run() { 29 consume(); 30 } 31 32 private void consume() { 33 while(true){ 34 try { 35 queue.take(); 36 Thread.sleep(1000); 37 System.out.println("队列有: "+queue.size()+" 个 元素"+" 编号"+ ++m + " 减少"+ " 减少次数:"+ ++n); 38 } catch (InterruptedException e) { 39 e.printStackTrace(); 40 } 41 } 42 } 43 } 44 45 class Producer extends Thread{ 46 47 @Override 48 public void run() { 49 produce(); 50 } 51 52 private void produce() { 53 for(int i=0; i<10; i++){ 54 try { 55 queue.put(1); 56 Thread.sleep(1000); 57 System.out.println("队列有: "+queue.size()+" 个 元素"+" 编号"+ ++m + " 添加"+ " 添加次数:"+ ++k); 58 } catch (InterruptedException e) { 59 e.printStackTrace(); 60 } 61 } 62 } 63 } 64 }