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();

乌云数据(10/月),香港cera 1核1G 10M带宽/美国cera 8核8G10M

乌云数据主营高性价比国内外云服务器,物理机,本着机器为主服务为辅的运营理念,将客户的体验放在第一位,提供性价比最高的云服务器,帮助各位站长上云,同时我们深知新人站长的不易,特此提供永久免费虚拟主机,已提供两年之久,帮助了上万名站长从零上云官网:https://wuvps.cn迎国庆豪礼一多款机型史上最低价,续费不加价 尽在wuvps.cn香港cera机房,香港沙田机房,超低延迟CN2线路地区CPU...

wordpress专业外贸建站主题 WordPress专业外贸企业网站搭建模版

WordPress专业外贸企业网站搭建模版,特色专业外贸企业风格 + 自适应网站开发设计 通用流行的外贸企业网站模块 + 更好的SEO搜索优化和收录 自定义多模块的产品展示功能 + 高效实用的后台自定义模块设置!采用标准的HTML5+CSS3语言开发,兼容当下的各种主流浏览器: IE 6+(以及类似360、遨游等基于IE内核的)、Firefox、Google Chrome、Safari、Opera...

80VPS:香港服务器月付420元;美国CN2 GIA独服月付650元;香港/日本/韩国/美国多IP站群服务器750元/月

80vps怎么样?80vps最近新上了香港服务器、美国cn2服务器,以及香港/日本/韩国/美国多ip站群服务器。80vps之前推荐的都是VPS主机内容,其实80VPS也有独立服务器业务,分布在中国香港、欧美、韩国、日本、美国等地区,可选CN2或直连优化线路。如80VPS香港独立服务器最低月付420元,美国CN2 GIA独服月付650元起,中国香港、日本、韩国、美国洛杉矶多IP站群服务器750元/月...

blockingqueue为你推荐
元宝网下载的手机元宝网软件是不是上不去啊?wmiprvse为什么会有wmiprvse.exe和wmiprvse 这两个 算不算病毒?策略组组策略是什么,命令是什么???smartupload为什么使用smartupload执行上传保存操作时用这句smart.save("upload")失败用smart.save("/upload")成功ruby语言Ruby是一种什么样的语言,主要用来做什么,现在有一家公司让我从java转ruby,我很犹豫?imqq官网如何伸请QQ?社工库网站怎么找社工库?相似图片搜索如何输入图片并且搜出最相似的图片?药品标准查询《中华人民名共和国卫生部药品标准》【20080802】?12306注册12306网站账户注册
vps主机 移动服务器租用 广州服务器租用 com域名价格 俄罗斯vps vps动态ip cn域名个人注册 warez 企业主机 mach cloudstack 香港cdn softbank官网 轻博客 网站监控 搜狗抢票助手 太原联通测速平台 毫秒英文 老左正传 新家坡 更多