案例
線程a往隊列裏添加元素,線程c在隊列裏取元素,兩個線程同時進行並保證線程安全
package com.inspire.juc.c_025;
import java.util.Random;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
public class T05_LinkedBlockingQueue {
static BlockingQueue<String> strs=new LinkedBlockingQueue<>();
static Random r=new Random();
public static void main(String[] args) {
new Thread(()->{
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++){
new Thread(()->{
for(;;){
try {
System.out.println(Thread.currentThread().getName()+" take - "+strs.take());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
},"c"+i).start();
}
}
}
附
LinkedBlockingQueue是無界的,底層原理是Condition的park等方法