import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; public class BlockingQueueTest { public static void main(String[] args) { final BlockingQueue queue = new ArrayBlockingQueue(3); //允许放三个数据的队列 for (int i = 0; i < 2; i++) { //模拟两个线程 new Thread() { public void run() { while (true) { //一直是true的话,就一直进来 try { Thread.sleep((long) (Math.random() * 1000)); //Math.random() 返回小于1的随机数 System.out.println(Thread.currentThread().getName() + "准备放数据!"); queue.put(1); //放数据 当满了三个的时候就放不进去,就阻塞 System.out.println(Thread.currentThread().getName() + "已经放了数据," + "队列目前有" + queue.size() + "个数据"); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); } new Thread() { public void run() { while (true) { //一直是true的话,就一直进来 try { //将此处的睡眠时间分别改为100和1000,观察运行结果 Thread.sleep(1000); System.out.println(Thread.currentThread().getName() + "准备取数据!"); queue.take(); //拿走数据,没有数据取的话就在这里一直堵着 System.out.println(Thread.currentThread().getName() + "已经取走数据," + "队列目前有" + queue.size() + "个数据"); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); } }