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美元,香港BGPRM 1核 1G 10Mbps峰值带宽 1TB流量,江西CN2-NAT 1核 512MB内存 100M带宽 ,

WHloud Official Notice(鲸云官方通知)(鲸落 梦之终章)]WHloud RouMu Cloud Hosting若木产品线云主机-香港节点上新预售本次线路均为电信CN2 GIA+移动联通BGP,此机型为正常常规机,建站推荐。本次预售定为国庆后开通,据销售状况决定,照以往经验或有咕咕的可能性,但是大多等待时间不长。均赠送2个快照 2个备份,1个默认ipv4官方网站:https:/...

hosthatch:14个数据中心15美元/年

hosthatch在做美国独立日促销,可能你会说这操作是不是晚了一个月?对,为了准备资源等,他们拖延到现在才有空,这次是针对自己全球14个数据中心的VPS。提前示警:各个数据中心的网络没有一个是针对中国直连的,都会绕道而且ping值比较高,想买的考虑清楚再说!官方网站:https://hosthatch.com所有VPS都基于KVM虚拟,支持PayPal在内的多种付款方式!芝加哥(大硬盘)VPS5...

百纵科技:美国独立服务器租用/高配置;E52670/32G内存/512G SSD/4IP/50M带宽,999元/月

百纵科技怎么样?百纵科技国人商家,ISP ICP 电信增值许可证的正规公司,近期上线美国C3机房洛杉矶独立服务器,大带宽/高配置多ip站群服务器。百纵科技拥有专业技术售后团队,机器支持自动化,自助安装系统 重启,开机交付时间 30分钟内交付!美国洛杉矶高防服务器配置特点: 硬件配置高 线路稳定 洛杉矶C3机房等级T4 平价销售,支持免费测试,美国独服适合做站,满意付款。点击进入:百纵科技官方网站地...

blockingqueue为你推荐
weakhashmapJava///map的父类是?策略组组策略完全使用方法策略组组策略是什么?查字网拐字换什么偏旁 成新字电子日历怎样调整电子日历上的时间editplus破解版DBTools Manager Professional 破解版在哪里可以下载?inode智能客户端iNode 智能客户端windows7上网方法数秦科技数秦科技旗下有哪些区块链项目?spawningvc出现error spawning c1.exe怎么解决?色库石伟伟怎么写啊
域名交易 上海服务器租用 美国和欧洲vps 美国独立服务器 buyvm zpanel 12306抢票助手 南昌服务器托管 dux web服务器的架设 lol台服官网 nerds 阿里校园 电信托管 彩虹云 阿里云邮箱登陆 杭州电信宽带 万网服务器 restart apache启动失败 更多