本教程操作环境: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
暂无评论内容