Java中的SynchronousQueue阻塞队列使用代码实例
更新时间:2023年12月14日 10:04:06 作者:Terisadeng
这篇文章主要介绍了Java中的SynchronousQueue阻塞队列使用代码实例,SynchronousQueue是无缓冲区的阻塞队列,即不能直接向队列中添加数据,会报队列满异常,需要的朋友可以参考下
SynchronousQueue阻塞队列
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();
}
}
到此这篇关于Java中的SynchronousQueue阻塞队列使用代码实例的文章就介绍到这了,更多相关SynchronousQueue阻塞队列内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
springboot之Duration(java.time.Duration)在yml properties中
这篇文章主要介绍了springboot之Duration(java.time.Duration)在yml properties中的配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-12-12
SpringBoot_Cache自定义使用SimpleCacheManager方式
这篇文章主要介绍了SpringBoot_Cache自定义使用SimpleCacheManager方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-07-07


最新评论