SynchronousQueue的实现 TransferQueue (一)
来源:互联网 发布:java线程同步 编辑:程序博客网 时间:2024/05/17 00:56
先看下 TransferQueue
下面介绍它的几个方法:
transfer(E e)
若当前存在一个正在等待获取数据的消费者线程,该消费者线程,会立刻得到这个数据。否则,将e插入到队列的尾部,并且当前线程进入阻塞状态。即在没有消费者的情况下,生成者也无法进行生产。
tryTransfer (E e)若当前存在一个正在等待获取的消费者线程,则该方法会即刻转移e,并返回true,若不存在则返回false。但是并不将e插入到队列中。这个方法不会阻塞当前线程。
3.hasWaitingConsumer()和getWaitingConsumerCount()用来判断当前是否有处于等待状态的消费者线程,和正在等待消费的消费者线程的个数。
4.tryTransfer(E e, long timeout, TimeUnit unit) 若当前存在一个正在等待获取的消费者线程,会立即传输给它; 否则将元素e插入到队列尾部,并且等待被消费者线程获取消费掉。若在指定的时间内元素e无法被消费者线程获取,则返回false,同时该元素从队列中移除。
以下上面的方法在使用demo
public class TransferQueueTest { private static TransferQueue<String> queue = new LinkedTransferQueue<String>(); public static void main(String args[]) throws InterruptedException { new Productor(1).start(); new Productor(2).start(); Thread.sleep(100); System.out.println(" over.size"+queue.size()); boolean flag =queue.hasWaitingConsumer(); System.out.println(" flag "+flag); int count =queue.getWaitingConsumerCount(); System.out.println(" count "+count); queue.take(); Thread.sleep(200); System.out.println(" over.size"+queue.size()); } static class Productor extends Thread { private int id; public Productor(int id) { this.id = id; } public void run() { try { String result = "id:" + this.id; System.out.println("begin to produce" + result); queue.transfer(result); System.out.println(" success to produce"+result); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }}
阅读全文
0 0
- SynchronousQueue的实现 TransferQueue (一)
- JDK7中TransferQueue的使用以及TransferQueue与SynchronousQueue的差别
- Java多线程-- SynchronousQueue队列和 TransferQueue队列比较及应用
- TransferQueue
- TransferQueue实现生产者、消费者模型
- SynchronousQueue实现原理
- SynchronousQueue 实现 二
- SynchronousQueue的简单应用
- SynchronousQueue的使用
- SynchronousQueue队列的使用
- SynchronousQueue的使用
- SynchronousQueue
- SynchronousQueue
- SynchronousQueue
- SynchronousQueue
- SynchronousQueue
- SynchronousQueue
- SynchronousQueue
- Qt随笔
- Flume 1.7.0 User Guide
- 手机登录FTP修改文件较好的软件
- leetcode628: Maximum Product of Three Numbers
- Go语句实现简单的冒泡排序
- SynchronousQueue的实现 TransferQueue (一)
- MongoDB索引入门
- Go实战--golang中defer的使用(有事没事defer一下)
- 递归删除某类文件(命令行实现)
- “平安壹钱包”面试
- 奇异博士
- [二分+2-sat]Hdu 3622——Bomb Game
- 元编程之Javascript
- 修改软件安装默认位置