大家好,又见面了,我是你们的朋友全栈君。
SynchronousQueue是无缓冲区的阻塞队列,即不能直接向队列中添加数据,会报队列满异常,如下所示:
import java.util.concurrent.SynchronousQueue;
public class SynchronousQueueExp {
public static void main(String[] args) {
SynchronousQueue<String> sq=new SynchronousQueue<>();
String str="aaa";
sq.add(str);
}
}
必须在有消费者阻塞等待时生产者才可以向队列中添加数据,这时由阻塞状态的消费者直接获取,相当于没有向队列中添加数据,直接将数据交给了消费者。
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.TimeUnit;
public class SynchronousQueueExp {
public static void main(String[] args) {
final SynchronousQueue<String> sq=new SynchronousQueue<>();
/*String str="aaa";
sq.add(str);*/
Thread t1=new Thread(new Runnable() {
@Override
public void run() {
try {
while (true) {
System.out.println("消费者阻塞等待获取数据...");
System.out.println("消费者消费数据:"+sq.take());
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
},"t1");
Thread t2=new Thread(new Runnable() {
@Override
public void run() {
sq.add("bb");
}
},"t2");
t1.start();
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
t2.start();
}
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/152126.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...