package src.main.java.com.qqjx.thread;/*
* @Auther wangpeng
* @Date 2021/2/1
*/import java.util.Random;import java.util.concurrent.BlockingQueue;import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.TimeUnit;publicclassT05_LinkedBlockingQueue{//Linked 链表 Blocking阻塞的static BlockingQueue<String> strs =newLinkedBlockingQueue<>();static Random r =newRandom();publicstaticvoidmain(String[] args){newThread(()->{for(int i =0; i <100; i++){try{
strs.put("a"+ i);//如果满了,就会等待 线程会阻塞
TimeUnit.MILLISECONDS.sleep(r.nextInt(1000));}catch(InterruptedException e){
e.printStackTrace();}}},"p1").start();for(int i =0; i <5; i++){newThread(()->{for(;;){try{//如果队列为空 再取的时候 线程也会阻塞
System.out.println(Thread.currentThread().getName()+" take -"+ strs.take());//如果空了,就会等待}catch(InterruptedException e){
e.printStackTrace();}}},"c"+ i).start();}}}
c1 take -a0
c2 take -a1
c3 take -a2
c1 take -a3
c0 take -a4
c4 take -a5
c2 take -a6
c3 take -a7
c1 take -a8
c0 take -a9
c4 take -a10
c2 take -a11
c3 take -a12
c1 take -a13
c0 take -a14
c4 take -a15
c2 take -a16
c3 take -a17
c1 take -a18
c0 take -a19