java中SynchronousQueue是什么意思


本教程操作环境:windows7系统、java10版,DELL G3电脑。

1.概念

SynchronousQueue是一个队列长度为 0 的 BlockingQueue,这样只要上一个入队列的生产者的消息没被消费,之后的生产者就必须等待。如果要保证生产者先后顺序,则需要设置为公平模式。

2.特点

1)内部容量是0

2)每次删除操作都要等待插入操作

3)每次插入操作都要等待删除操作

4)一个元素,一旦有了插入线程和移除线程,那么很快由插入线程移交给移除线程,这个容器相当于通道,本身不存储元素

5)在多任务队列,是最快的处理任务方式。

3.实例

packagecom.example.demo.threadnew;

importjava.util.Random;
importjava.util.concurrent.SynchronousQueue;
importjava.util.concurrent.TimeUnit;

publicclassQueueT{

publicstaticvoidmain(String[]args)throwsInterruptedException{
SynchronousQueue<Integer>queue=newSynchronousQueue<Integer>();

newProduct(queue).start();
newCustomer(queue).start();
}

staticclassProductextendsThread{

SynchronousQueue<Integer>queue;

publicProduct(SynchronousQueue<Integer>queue){
this.queue=queue;
}

@Override
publicvoidrun(){
while(true){
intrand=newRandom().nextInt(1000);
System.out.println("生产了一个产品:"+rand);
System.out.println("等待三秒后运送出去...");
try{
TimeUnit.SECONDS.sleep(3);
}catch(InterruptedExceptione){
e.printStackTrace();
}
try{
queue.put(rand);
}catch(InterruptedExceptione){
e.printStackTrace();
}

System.out.println(queue.isEmpty());
}
}
}

staticclassCustomerextendsThread{

SynchronousQueue<Integer>queue;

publicCustomer(SynchronousQueue<Integer>queue){
this.queue=queue;
}

@Override
publicvoidrun(){
while(true){
try{
System.out.println("消费了一个产品:"+queue.take());
}catch(InterruptedExceptione){
e.printStackTrace();
}
System.out.println("------------------------------------------");
}
}
}

}

原文来自:https://www.py.cn

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容