package com.lb; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; public class ProductConsumer { private BlockingQueue<String> queue = null; private boolean flag = true; public static void main(String[] args) { // TODO Auto-generated method stub new ProductConsumer().test(); } public void test() { Product product = new Product(queue); Consumer consumer = new Consumer(queue); Thread p = new Thread(product); Thread c = new Thread(consumer); p.start(); c.start(); } public ProductConsumer() { queue = new ArrayBlockingQueue<>(1); } class Product implements Runnable { private BlockingQueue<String> queue = null; public Product(BlockingQueue<String> queue) { // TODO Auto-generated constructor stub this.queue = queue; } @Override public void run() { // TODO Auto-generated method stub while (flag) { try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } String n = String.valueOf((int) (Math.random() * 10)); try { queue.put(n); System.out.println("生产了 " + n); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } class Consumer implements Runnable { private BlockingQueue<String> queue = null; public Consumer(BlockingQueue<String> queue) { // TODO Auto-generated constructor stub this.queue = queue; } @Override public void run() { // TODO Auto-generated method stub while (flag) { try { Thread.sleep(4000); System.out.println("消费了 " + queue.take()); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }