参考
介绍
我理解为队列长度为1,放进去一个元素之后就必须等待别人取出之后才能放入下一个
blocking queue ,其中每个插入操作必须等待另一个线程执行相应的删除操作,反之亦然。 同步队列没有任何内部容量,甚至没有容量。 您不能在同步队列中使用peek ,因为只有在您尝试删除它时才会出现该元素; 你不能插入一个元素(使用任何方法),除非另一个线程试图删除它; 你不能迭代,因为没有什么可以迭代。 队列的头部是第一个排队插入线程试图添加到队列的元素; 如果没有这样排队的线程,那么没有元素可供删除, poll()将返回null 。 出于其他Collection方法的目的(例如contains ), SynchronousQueue充当空集合。 此队列不允许null元素。
代码
package queue;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.TimeUnit;
/**
* @Author 夏秋初
* @Date 2022/3/3 13:53
*/
public class Test {
public static void main(String[] args) {
SynchronousQueue<String> synchronousQueue = new SynchronousQueue();
new Thread(()->{
for (int i = 0; i < 10; i++) {
try {
synchronousQueue.put(String.valueOf(i));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
new Thread(()->{
for (int i = 0; i < 10; i++) {
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
System.out.println(synchronousQueue.take());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
}