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

TmhHost暑假活动:高端线路VPS季付8折优惠,可选洛杉矶CN2 GIA/日本软银/香港三网CN2 GIA/韩国双向CN2等

tmhhost怎么样?tmhhost正在搞暑假大促销活动,全部是高端线路VPS,现在直接季付8折优惠,活动截止时间是8月31日。可选机房及线路有美国洛杉矶cn2 gia+200G高防、洛杉矶三网CN2 GIA、洛杉矶CERA机房CN2 GIA,日本软银(100M带宽)、香港BGP直连200M带宽、香港三网CN2 GIA、韩国双向CN2。点击进入:tmhhost官方网站地址tmhhost优惠码:Tm...

两款半月湾 HMBcloud 春节88折日本和美国CN2 VPS主机套餐

春节期间我们很多朋友都在忙着吃好喝好,当然有时候也会偶然的上网看看。对于我们站长用户来说,基本上需要等到初八之后才会开工,现在有空就看看是否有商家的促销。这里看到来自HMBcloud半月湾服务商有提供两款春节机房方案的VPS主机88折促销活动,分别是来自洛杉矶CN2 GIA和日本CN2的方案。八八折优惠码:CNY-GIA第一、洛杉矶CN2 GIA美国原生IP地址、72小时退款保障、三网回程CN2 ...

恒创新客(317元)香港云服务器 2M带宽 三网CN2线路直连

恒创科技也有暑期的活动,其中香港服务器也有一定折扣,当然是针对新用户的,如果我们还没有注册过或者可以有办法注册到新用户的,可以买他们家的香港服务器活动价格,2M带宽香港云服务器317元。对于一般用途还是够用的。 活动链接:恒创暑期活动爆款活动均是针对新用户的。1、云服务器仅限首次购买恒创科技产品的新用户。1 核 1G 实例规格,单个账户限购 1台;其他活动机型,单个账户限购 3 台(必须在一个订单...

blockingqueue为你推荐
mdm乳化剂MDM起什么作用scanf_sscanf_s和以前的scanf是一样等级的吗???g2g吉他的效果器的名称是什么意思?(G1G,G2G等等)知识库管理系统急求一款电子文档管理系统,有好用的推荐下~?策略组怎样打开组策略???查字网衾字怎么读音是什么rdlregardless是什么意思jdk6Java 中的 JDK 6 Update 6 到哪下载啊 ? 有一点急调度系统现在有很多人说同城调度系统,这是用来干嘛的呀?丁奇赛尔号丁奇技能表,带等级,刷什么学习力好?
美国免费虚拟主机 域名投资 怎样注册域名 荣耀欧洲 香港vps99idc mach 骨干网络 dd444 服务器维护方案 刀片服务器的优势 双11秒杀 免费dns解析 东莞idc 太原联通测速 贵阳电信 摩尔庄园注册 酸酸乳 电信宽带测速软件 cdn服务 小夜博客 更多