/**
*LinkedTransferQueue是有容量的,
* 当第一个生产者线程调用transfer时,如果没有消费者,会阻塞。
* 第二个生产者线程调用transfer时,如果没有消费者,会添加到队列的末尾。
* 直到有消费者进行消费时调用take方法,被阻塞的生产者线程才继续运行
*/ /**
* LinkedTransferQueue(后称LTQ) 采用一种预占模式。意思就是消费者线程取元素时,
* 如果队列为空,那就生成一个节点(节点元素为null)入队,
* 然后消费者线程被等待在这个节点上,后面生产者线程入队时发现有一个元素为null的节点,
* 生产者线程就不入队了,直接就将元素填充到该节点,并唤醒该节点等待的线程,
* 被唤醒的消费者线程取走元素,从调用的方法返回
*/
public class LinkedTransferQueueTest { private static LinkedTransferQueue<String> queue = new LinkedTransferQueue<String>(); public static void main(String[] args) throws InterruptedException { ExecutorService executorService = Executors.newCachedThreadPool();
executorService.submit(() -> {
try {
System.out.println("a == "+queue.take());
} catch (InterruptedException e) {
e.printStackTrace();
}
});
executorService.submit(() -> {
try {
System.out.println("b == "+queue.take()); } catch (InterruptedException e) {
e.printStackTrace();
}
});
executorService.shutdown();
Thread.sleep();
queue.transfer("hello1");
queue.transfer("hello2");
System.out.println("^^^^^^^^^^");
} }

LinkedTransferQueue的更多相关文章

  1. 3.集--LinkedTransferQueue得知

    近期在阅读开源项目里,发现有几个project都不尽同样地使用LinkedTransferQueue这个数据结构.比方netty,grizzly,xmemcache,Bonecp. Bonecp还扩展 ...

  2. 死磕 java集合之LinkedTransferQueue源码分析

    问题 (1)LinkedTransferQueue是什么东东? (2)LinkedTransferQueue是怎么实现阻塞队列的? (3)LinkedTransferQueue是怎么控制并发安全的? ...

  3. 并发编程—— LinkedTransferQueue

    1. 前言 Java 中总的算起来有 8 种阻塞队列. 我们分析了: 并发编程之 SynchronousQueue 核心源码分析 并发编程之 ConcurrentLinkedQueue 源码剖析 并发 ...

  4. Java之集合(二十一)LinkedTransferQueue

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7505355.html 1.前言 本章介绍无界的阻塞队列LinkedTransferQueue,JDK7才提供了这 ...

  5. 高并发第十三弹:J.U.C 队列 SynchronousQueue.ArrayBlockingQueue.LinkedBlockingQueue.LinkedTransferQueue

    因为下一节会说线程池,要用线程池 那么线程池有个很重要的参数 就是Queue的选择 常用的队列其实就两种: 先进先出(FIFO):先插入的队列的元素也最先出队列,类似于排队的功能.从某种程度上来说这种 ...

  6. 阻塞队列之二:LinkedTransferQueue

    一.LinkedTransferQueue简介 TransferQueue是一个继承了BlockingQueue的接口,并且增加若干新的方法.LinkedTransferQueue是TransferQ ...

  7. JAVA 1.7并发之LinkedTransferQueue原理理解

    昨天刚看完BlockingQueue觉得好高级啊,今天扫到1.7就发现了升级版.... 如果对内容觉得不够充分,可以去看http://www.cs.rochester.edu/u/scott/pape ...

  8. 集合类源码(五)Collection之BlockingQueue(LinkedTransferQueue, PriorityBlockingQueue, SynchronousQueue)

    LinkedTransferQueue 功能 全名 public class LinkedTransferQueue<E> extends AbstractQueue<E> i ...

  9. JDK源码那些事儿之LinkedTransferQueue

    在JDK8的阻塞队列实现中还有两个未进行说明,今天继续对其中的一个阻塞队列LinkedTransferQueue进行源码分析,如果之前的队列分析已经让你对阻塞队列有了一定的了解,相信本文要讲解的Lin ...

随机推荐

  1. JavaScript-----11.预解析

    1.预解析 1.1引子 //1问 console.log(num);//报错 num未定义 //2问 console.log(num); //undefined 未报错 var num = 10; / ...

  2. 范罗士空气净化器PT65评测

    买了一台空气净化器,之前网上查了查,哟,是个知名品牌,做碎纸机的. 你问我为啥找个卖碎纸机的买空气净化器?因为年轻,咱们往下看 包装还可以 一打开就有疑问了,这塑料味道不对呀,三手料也不该这个味儿啊. ...

  3. RTX5的汽车级,工业级,医疗和铁路安全认证已经通过,证书已颁发

    说明: 1.当前RTX5的教程已经在制作中,使用CMSIS-RTOS V2封装层,含FreeRTOS,配套V7,V6和V5板子​. 2.我们各种开发板和模块的资料汇总贴,搞了个cnblogs,临时先用 ...

  4. 函数式编程 - Functional Programming

    什么是函数式编程 函数式编程是一种编程范式. 编程范式又是什么? 编程范式是一种解决问题的思路. 命令式编程 把程序看作 一系列改变状态的指令: 函数式编程 把程序看作 一系列数学函数映射的组合. i ...

  5. robot用例执行常用命令(转)

    执行命令 执行一个用例 robot -t “testcase_name“ data_test.robot 按用例文件执行 robot data_test.robot或者 robot --suite “ ...

  6. Centos7 下 PHP 添加缺少的组件 sockets 和 openssl

    环境是 centos7 + nginx 1.14 + php 7.2.18,由于新增邮件发送功能,使用的是 socket 通讯的方式,需要开启 php 的 sockes 和 openssl 扩展 安装 ...

  7. Python实现图片的base64编码

    import base64 if __name__ == "__main__": dir='image.jpg' basef=open(dir.split('.')[0]+'_ba ...

  8. javaWeb核心技术第四篇之Javascript第二篇事件和正则表达式

    - 事件 - 表单提交(掌握) "onsubmit" - 单击事件(掌握) "onclick" - 页面加载成功事件(掌握) "onload" ...

  9. 松软科技带你学前端:JavaScript 使用

    <script> 标签 在 HTML 中,JavaScript 代码必须位于 <script> 与 </script> 标签之间. 实例 <script> ...

  10. Ajax跨域请求,设置content

    在使用Ajax跨域请求时,如果设置Header的ContentType为application/json,会分两次发送请求.第 一次先发送Method为OPTIONS的请求到服务器,这个请求会询问服务 ...