SynchronousQueue:一个不存储元素的阻塞队列。每一个 put 操作必须等待一个 take 操作,否则不能继续添加元素。内部没有容器,一个生产线程,当它生产产品(即put的时候),如果当前没有人想要消费产品(即当前没有线程执行take),此生产线程必须阻塞,等待一个消费线程调用take操作,take操作将会唤醒该生产线程,同时消费线程会获取生产线程的产品(即数据传递),这样的一个过程称为一次配对过程(当然也可以先take后put,原理是一样的)。
package com.neo.study001.radio13;
import java.util.concurrent.SynchronousQueue;
/**
* @author liyy
* @date 2020/4/26 23:56
*/
public class UseSynchronousQueue {
public static void main(String[] args) throws Exception{
final SynchronousQueue<Integer> queue = new SynchronousQueue<Integer>();
//queue.add(1); SynchronousQueue使用add()方法会抛java.lang.Exception: Queue full异常
Thread t1=new Thread(new Runnable() {
@Override
public void run() {
System.out.println("put thread start");
try {
queue.put(1);
} catch (InterruptedException e) {
}
System.out.println("put thread end");
}
},"t1");
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
Sys