blockingqueuejava多线程 读取队列数据,减少耦合性怎么做

blockingqueue  时间:2021-07-12  阅读:()

Java中Queue和BlockingQueue的区别

阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞。

试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列插入新的元素。

同样,试图往已满的阻塞队列中添加新元素的线程同样也会被阻塞,直到其他的线程使队列重新变得空闲起来,如从队列中移除一个或者多个元素,或者完全清空队列. 从5.0开始,JDK在java.util.concurrent包里提供了阻塞队列的官方实现。

尽管JDK中已经包含了阻塞队列的官方实现,但是熟悉其背后的原理还是很有帮助的。

一下是阻塞队列的实现: public class BlockingQueue { private List queue = new LinkedList(); private int limit = 10; public BlockingQueue(int limit){ this.limit = limit; } public synchronized void enqueue(Object item) throws InterruptedException { while(this.queue.size() == this.limit) { wait(); } if(this.queue.size() == 0) { notifyAll(); } this.queue.add(item); } public synchronized Object dequeue() throws InterruptedException{ while(this.queue.size() == 0){ wait(); } if(this.queue.size() == this.limit){ notifyAll(); } return this.queue.remove(0); } }

Java线程池几个参数

corePollSize:核心线程数。

maximumPoolSize:最大线程数。

keepAliveTime:空闲的线程保留的时间。

TimeUnit:空闲线程的保留时间单位。

BlockingQueue:阻塞队列,存储等待执行的任务。

ThreadFactory:线程工厂,用来创建线程。

RejectedExecutionHandler:队列已满,而且任务量大于最大线程的异常处理策略。

BlockingQueue和List 有什么区别,BlockingQueue用在什么场景下

ueue的作用很多,比如说解耦。

举个比较常见的例子: 某电商有交易和邮件两套系统,当一个交易完成时,给用户发一封确认邮件。

这里 交易系统和邮件系统显然是两个优先级的东西,交易系统要求很高的实时性,而邮件系统则不必,为了合理利用服务器资源,应当把这两套系统分离,合理的做法 是,交易完成时,交易系统生成一个发邮件的任务,丢到queue中,而邮件系统监听在queue的另一端,用一个相对较低的速度处理queue中的发邮件 任务。

当然,这里的queue一般是mq或者activemq之类的产品。

blockingqueue的作用本质上和他们类似。

比如我们写个静态网页的爬虫,为了尽可能的高效率,应当把网络io和网站内容分析解耦,让更多的线程去处理较慢的网络io,把获取到的内容丢到queue中,用较少的线程处理速度较快的网页内容分析。

至于为什么有arraylist还要用blockingqueue,这和有array了为什么还要有arraylist一样,为了方便呗,不信你自己用arraylist封装个能保证fifo,能保证线程安全的东西出来看下。

blockqueue 是线程安全的吗

BlockingQueue 实现是线程安全的。

  英特尔最新推出了第六代酷睿产品,采用全新一代的架构,性能提示、功能降低、续航更加长久、无论办公学习、畅玩游戏或者观看超高清影音,均得心应手,您也可以试试。

blockingqueue可以用来做插入数据库操作吗

在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。

通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。

本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。

java多线程 读取队列数据,减少耦合性怎么做

简单问题复杂化了。

线程池,本身有任务队列; 还要用到数据队列; 两把锁; 一把数据锁就解决的问题。

自己构建一个blockingqueue,注入到m个生产者线程及n个消费者线程中; 生产者线程不停的生产,往queue里put(),如果队列队列满了,线程wait挂起; 消费者线程不停的消费,从queue里take(),如过队列空了,线程自动挂起; BlockingQueue queue = new ArrayBlockingQueue(1000); for(int i=0;i<5;i++) new ConsumerThread(queue).start(); for(int i=0;i<10;i++) new ProducerThread(queue).start();

统计一下racknerd正在卖的超便宜VPS,值得推荐的便宜美国VPS

racknerd从成立到现在发展是相当迅速,用最低的价格霸占了大部分低端便宜vps市场,虽然VPS价格便宜,但是VPS的质量和服务一点儿都不拉跨,服务器稳定、性能给力,尤其是售后方面时间短技术解决能力强,估计这也是racknerd这个品牌能如此成功的原因吧! 官方网站:https://www.racknerd.com 多种加密数字货币、信用卡、PayPal、支付宝、银联、webmoney,可...

ZJI(月付450元),香港华为云线路服务器、E3服务器起

ZJI发布了9月份促销信息,针对香港华为云线路物理服务器华为一型提供立减300元优惠码,优惠后香港华为一型月付仅450元起。ZJI是原来Wordpress圈知名主机商家:维翔主机,成立于2011年,2018年9月更名为ZJI,提供中国香港、台湾、日本、美国独立服务器(自营/数据中心直营)租用及VDS、虚拟主机空间、域名注册等业务,商家所选数据中心均为国内访问质量高的机房和线路,比如香港阿里云、华为...

易探云:买香港/美国/国内云服务器送QQ音乐绿钻豪华版1年,价值180元

易探云产品限时秒杀&QQ音乐典藏活动正在进行中!购买易探云香港/美国云服务器送QQ音乐绿钻豪华版1年,价值180元,性价比超级高。目前,有四大核心福利产品推荐:福利一、香港云服务器1核1G2M,仅218元/年起(香港CN2线路,全球50ms以内);福利二、美国20G高防云服务器1核1G5M,仅336元/年起(美国BGP线路,自带20G防御);福利三、2G虚拟主机低至58.8元/年(更有免费...

blockingqueue为你推荐
联想网盘联想网盘收费吗,怎么样wmiprvse为什么进程里面会出现很多wmiprvse.exe开票系统国税承认的开票系统有哪些md5值文件名后缀为MD5是什么文件。李昊天铠甲勇士刑天中人物资料丁奇海贼王里“D”的意思是什么?数秦科技安徽数智通科技有限公司怎么样?51信用卡论坛刚才发现51信用卡管家可以查个人征信了,就查了下信用卡信用记录。这是截图,大家帮我看看我的这个逾期什么是SOA什么是中子刀?您了解吗?新手怎么制作表格怎样能学会制作表格
如何注册域名 七牛优惠码 国外主机 博客主机 外国空间 免费名片模板 ibrs 美国十次啦服务器 百兆独享 域名接入 smtp虚拟服务器 阿里云官方网站 免费网络空间 江苏徐州移动 聚惠网 腾讯服务器 windowsserver2008r2 magento主机 web服务器 神棍节 更多