版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dongyuxu342719/article/details/88914665
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();
}
}