标签分类
技术文章
当前位置:主页 > 计算机编程 > java > 通过实例了解java TransferQueue

java TransferQueue实例详解用法

  • 发布时间:
  • 作者:码农之家原创
  • 点击:82

通过实例了解java TransferQueue

这篇文章主要知识点是关于java,TransferQueue,通过实例了解java TransferQueue,的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

Java JDK 8学习笔记
Java JDK 8学习笔记全书扫描版
  • 类型:Java大小:92.3 MB格式:PDF出版:清华大学出版社发行部作者:林信良
立即下载

更多相关的学习资源可以参阅 程序设计电子书Java电子书、等栏目。

序言

本文主要简介一下TransferQueue。

TransferQueue

TransferQueue(java7引入)继承了BlockingQueue(BlockingQueue又继承了Queue)并扩展了一些新方法。生产者会一直阻塞直到所添加到队列的元素被某一个消费者所消费(不仅仅是添加到队列里就完事)。

LinkedTransferQueue

LinkedTransferQueue实际上是ConcurrentLinkedQueue、SynchronousQueue(公平模式)和LinkedBlockingQueue的超集。而且LinkedTransferQueue更好用,因为它不仅仅综合了这几个类的功能,同时也提供了更高效的实现。

对比SynchronousQueue

SynchronousQueue使用两个队列(一个用于正在等待的生产者、另一个用于正在等待的消费者)和一个用来保护两个队列的锁。而LinkedTransferQueue使用CAS操作实现一个非阻塞的方法,这是避免序列化处理任务的关键。

使用场景

当我们不想生产者过度生产消息时,TransferQueue可能非常有用,可避免发生OutOfMemory错误。在这样的设计中,消费者的消费能力将决定生产者产生消息的速度。

实例

public class LinkedTransferQueueDemo {
static LinkedTransferQueue<String> lnkTransQueue = new LinkedTransferQueue<String>();
public static void main(String[] args) {
ExecutorService exService = Executors.newFixedThreadPool(2);
Producer producer = new LinkedTransferQueueDemo().new Producer();
Consumer consumer = new LinkedTransferQueueDemo().new Consumer();
exService.execute(producer);
exService.execute(consumer);
exService.shutdown();
}
class Producer implements Runnable{
@Override
public void run() {
for(int i=0;i<3;i++){
try {
System.out.println("Producer is waiting to transfer...");
lnkTransQueue.transfer("A"+i);
System.out.println("producer transfered element: A"+i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Consumer implements Runnable{
@Override
public void run() {
for(int i=0;i<3;i++){
try {
System.out.println("Consumer is waiting to take element...");
String s= lnkTransQueue.take();
System.out.println("Consumer received Element: "+s);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}

输出

Producer is waiting to transfer...
Consumer is waiting to take element...
producer transfered element: A0
Producer is waiting to transfer...
Consumer received Element: A0
Consumer is waiting to take element...
producer transfered element: A1
Producer is waiting to transfer...
Consumer received Element: A1
Consumer is waiting to take element...
Consumer received Element: A2
producer transfered element: A2

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。

以上就是本次给大家分享的全部知识点内容总结,大家还可以在下方相关文章里找到儿童python编程入门书籍推、 解决axios.interceptors.respon、 vue项目中使用md5加密以及、 等java文章进一步学习,感谢大家的阅读和支持。

上一篇:java对synchronized的优化知识点总结

下一篇:Springboot引用外部配置文件的实例方法

展开 +

收起 -

学习笔记
网友NO.673074

简单总结JavaScript中的String字符串类型

String类型表示由0或多个16位Unicode字符组成的字符序列,即字符串。ECMAScript中的字符串是不可变的,也就是说,字符串一旦创建,它们的值就不能改变。要改变某个变量保存的字符串,首先要销毁原来的字符串(此过程是在后台发生的),然后再用另一个包含新值的字符串填充该变量 字符字面量/转义序列: \n 换行\t 制表\r 回车\b 空格\f 换页符\\ 斜杠\' 单引号\" 双引号\xnn \unnn 字符串转换:两个方法 1.toString():只有null和undefined没有这个方法。 每个字符串也都有一个toString()方法,该方法返回字符串的一个副本。多数情况下,调用toString()方法不必传递参数,但是,在调用数值的toString()方法时,可以传递一个参数:输出数值的基数。这个方法唯一要做的就是返回相应值的字符串表示。 var num = 10;console.log(num.toString());//"10"console.log(num.toString(2));//"1010" 2.String():适用于所有类型,遵循以下规则 如果值有toString()方法,则调用该方法(没有参数)并返回相应结果 如果值是null,则返回"null" 如果值是undefined,则返回"undefined" 示例 字符串是一组由16位值组成的不可变的有序序列,每个字符通常来自于Unicode字符集。 var i = "abcdefg"; 在JavaScript字符串中,反斜线\有着特殊的用途,反斜线符号后加一个字符,就不再表示它们的字面含义了,不如\n就是一个转……

网友NO.219613

Java仿Windows记事本源代码分享

本文实例为大家分享了Java仿Windows记事本的具体代码,供大家参考,具体内容如下 先上截图: 源代码: import java.awt.*;import javax.swing.*;import javax.swing.filechooser.FileNameExtensionFilter;import javax.swing.undo.UndoManager;import java.awt.event.*;import java.io.*;/** * * @author cjbi@outlook.com * @created 2015年7月6日 上午11:22:24 */public class JNotepad extends JFrame implements ActionListener { JMenuBar menubar = new JMenuBar(); JMenu file = new JMenu("文件(F)"); JMenu edit = new JMenu("编辑(E)"); JMenu format = new JMenu("格式(O)"); JMenu help = new JMenu("帮助(H)"); JMenuItem create = new JMenuItem("新建"); JMenuItem open = new JMenuItem("打开..."); JMenuItem save = new JMenuItem("保存"); JMenuItem saveAs = new JMenuItem("另存为..."); JMenuItem exit = new JMenuItem("退出"); JMenuItem undo = new JMenuItem("撤销"); JMenuItem cut = new JMenuItem("剪切"); JMenuItem copy = new JMenuItem("复制"); JMenuItem paste = new JMenuItem("粘贴"); JMenuItem findRep = new JMenuItem("查找替换"); JMenuItem selectAll = new JMenuItem("全选"); JMenuItem font = new JMenuItem("字体"); JMenuItem about = new JMenuItem("关于"); JMenuItem cut2 = new JMenuItem("剪切(X)"); JMenuItem copy2 = new JMenuItem("复制(C)"); JMenuItem paste2 = new JMenuItem("粘贴(V)"); JMenuItem selectAll2 = new JMenuItem("全选(A)"); public static JTextArea textarea = new JTextArea(); UndoManager um = new UndoManager(); JScrollPane sc……

网友NO.769259

JavaScript实现离开页面前提示功能【附jQuery实现方法】

本文实例讲述了JavaScript实现离开页面前提示功能。分享给大家供大家参考,具体如下: 离开页面前的提示不可以用 onunload 去做,因为它只是兼容IE,你要兼容Google与FireFox就蛋疼了。 而且这个事件还是关闭之后才会触发的。 取而代之可以用 onbeforeunload 去实现。 onbeforeunload 可以在用户关闭或刷新窗口、或者点击本页内的任何超级链接都会触发的。 其JavaScript代码如下: scriptwindow.onbeforeunload=function(e){ var e=window.event||e; e.returnValue=("确定离开当前页面吗?");}/script 非常简短,一开始利用window.event与e的或,兼容浏览器。 其返回值就是提示信息。 在IE8的效果如下,第一行与最后一行是必须存在的。用户点击“取消”不会发生任何事情,点击“确定”则继续之前的动作。 在Google Chrome的效果如下,只有最后一行是我们可以控制的,其它都是系统本身就有的东西,不能够被改写。 野狐禅的效果如下,其提示信息读不出来,我也没办法,谁叫这个浏览器是野狐禅呢? 这段东西,用JQuery则这样写: $(window).bind('beforeunload',function(){ return '提示信息'; }); JQuery1.9自带全浏览器兼容…… 更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript页面元素操作技巧总结》、《JavaScript正则表达式技巧大全》、《JavaScript查找算法技巧总结》……

网友NO.442663

JavaScript中Array方法你该知道的正确打开方法

前言 在过去的几个月,我发现我的拉取请求中存在四个完全相同的 JavaScript 错误。于是我写了这篇文章,总结了如何在 JavaScript 中正确使用地使用 Array 的方法! Array对象为JavaScript内置对象,具有以下属性: 属性 描述 constructor 返回对创建此对象的数组函数的引用。 length 返回数组中元素的个数 prototype 向对象添加属性和方法。 用 Array.includes 代替 Array.indexOf “如果你要在数组中查找元素,请使用 Array.indexOf”。我记得在学习 JavaScript 的时候,在教材中读到这样的一句话。毫无疑问,这句话是真的! MDN 文档写道,Array.indexOf 将“返回第一次出现给定元素的索引”。因此,如果我们稍后要在代码中使用这个返回的索引,那么使用 Array.indexOf 找到索引就对了。 但是,如果我们只想知道数组是否包含某个值,该怎么办?这似乎是一个是与否的问题,或者说是一个布尔值问题。对于这种情况,我建议使用返回布尔值的 Array.includes。 'use strict';const characters = [ 'ironman', 'black_widow', 'hulk', 'captain_america', 'hulk', 'thor',];console.log(characters.indexOf('hulk'));// 2console.log(characters.indexOf('batman'));// -1console.log(characters.includes('hulk'));// trueconsole.log(characters.includes('batman'));// false 使用 Array.find 而不是 Array.filter Array.filter 是一个非常有用的方法。它接受一个回调……

<
1
>

Copyright 2018-2019 xz577.com 码农之家

版权责任说明