用blockingqueue实现生产者消费者
生产者:
import java.util.concurrent.BlockingQueue; public class Producer implements Runnable{ BlockingQueue<String> queue; public Producer(BlockingQueue<String> queue) { this.queue=queue; } @Override public void run() { try { String temp="Producer生产的线程被消费了"+Thread.currentThread().getName(); System.out.println("I have made a product:"+Thread.currentThread().getName()); queue.put(temp);//队列满了会阻塞当前线程,必须是put } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
消费者:
import java.util.concurrent.BlockingQueue; public class Consumer implements Runnable{ BlockingQueue<String> queue; public Consumer(BlockingQueue<String> queue) { this.queue=queue; } @Override public void run() { String temp; try { temp = queue.take();//队列为空就会阻塞当前线程 System.out.println(temp); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
测试:
public class Test { public static void main(String[] args) { BlockingQueue<String> queue=new LinkedBlockingQueue<String>(2);//这里不传入2的话默认是Integer.maxValue Consumer consumer=new Consumer(queue); Producer producer=new Producer(queue); for(int i=0;i<5;i++) { new Thread(producer,"Producer"+(i+1)).start(); new Thread(consumer,"Consumer"+(i+1)).start(); } } }
输出:
I have made a product:Producer1
Producer生产的线程被消费了Producer1
I have made a product:Producer2
I have made a product:Producer3
Producer生产的线程被消费了Producer2
Producer生产的线程被消费了Producer3
I have made a product:Producer5
I have made a product:Producer4
Producer生产的线程被消费了Producer5
Producer生产的线程被消费了Producer4
本文来自博客园,作者:LeeJuly,转载请注明原文链接:https://www.cnblogs.com/peterleee/p/11345238.html

浙公网安备 33010602011771号