本教程操作环境: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


















































暂无评论内容