Java阻塞队列BlockingQueue实例分析


这篇文章主要讲解了“Java阻塞队列BlockingQueue实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java阻塞队列BlockingQueue实例分析”吧!无限队列(unbounded queue)无容量限定,只随存储变化有限队列(bounded queue)定义了最大容量向无限队列添加元素的所有操作都将永远不会阻塞(也是线程安全的),因此它可以增长到非常大的容量。 使用无限阻塞队列 BlockingQueue 设计生产者 – 消费者模型时最重要的是消费者应该能够像生产者向队列添加消息一样快地消费消息。否则可能内存不足而抛出 OutOfMemory 异常。1.通常使用链表或数组实现2.一般具有FIFO(先进先出)特性,也可以设计为双端队列3.队列的主要操作:入队和出队定义:线程通信中,在任意时刻,无论并发有多高,在单个 JVM 上,同一时间永远只有一个线程能对队列进行入队或出队操作。BlockingQueue 可以在线程之间共享而无需任何显式同步阻塞队列的类型:JAVA中的应用场景 :线程池、SpringCloud-Eureka 三级缓存、Nacos、MQ、Netty 等ArrayBlockingQueue :由数组支持的有界队列应用场景:线程池中有比较多的应用、生产者消费者模型工作原理:基于 ReentrantLock 保证线程安全,根据Condition实现队列满时的阻塞LinkedBlockingQueue :基于链表的无界队列(理论上有界)PriorityBlockingQueue :由优先级堆支持的无界优先级队列DelayQueue :由优先级堆支持的、基于时间的调度队列,内部基于无界队列PriorityQueue 实现,而无界队列基于数组的扩容实现使用方法:入队的对象必须要实现 Delayed 接口,而 Delayed 集成自 Comparable 接口应用场景:售卖电影票等工作原理:队列内部会根据时间优先级进行排序。延迟类线程池周期执行。它们都实现了BlockingQueue接口,都有put()和take()等方法,创建方式如下:添加元素:检索元素:实现:同步等待队列(CLH)+ 条件等待队列满足条件的元素在CLH队列中等待锁,不满足条件的队列挪到条件等待队列,满足条件后再从 tail 插入 CLH 队列线程获取锁的条件:在 CLH 队列里等待的 Node 节点,并且 Node 节点的前驱节点是 Singal。条件等待队列里的线程是无法获取锁的。令当前线程等待,直到收到信号或被中断详:与此 Condition 关联的锁被自动释放,进入等待,并且处于休眠状态,直到发生以下四种情况之一:①其他线程调用这个Condition的 signal 方法,当前线程恰好被选为要被唤醒的线程;②其他线程调用这个条件的 signalAll 方法③其他线程中断当前线程,支持中断线程挂起;④一个“虚假的唤醒”发生了。在这些情况下,在此方法返回之前,当前线程必须重新获得与此条件相关联的锁。当线程返回时,保证它持有这个锁。如果当前线程有以下两种情况之一:①在进入该方法时设置中断状态;②在等待时被中断,支持线程挂起的中断抛出InterruptedExceptionBlockingQueue 可以在线程之间共享免费云主机域名而无需任何显式同步,在生产者消费者之间,只需要将阻塞队列以参数的形式进行传递即可。它内部的机制会自动保证线程的安全性。生产者:实现了 Runnable 接口,每个生产者生产100种商品和1个中断标记后完成线程任务消费者:消费者拿到终止消费标记终止消费,否则消费商品,拿到终止标记后完成线程任务客户端类:创建与计算机 CPU 核数相同的线程数,与 16个生产者定义:Java 延迟队列提供了在指定时间才能获取队列元素的功能,队列头元素是最接近过期的元素。没有过期元素的话,使用 poll() 方法会返回 null 值,超时判定是通过getDelay(TimeUnit.NANOSECONDS)方法的返回值小于等于 0 来判断。延时队列不能存放空元素。测试类:从运行结果可以看出队列是延迟出队,间隔和我们所设置的时间相同感谢各位的阅读,以上就是“Java阻塞队列BlockingQueue实例分析”的内容了,经过本文的学习后,相信大家对Java阻塞队列BlockingQueue实例分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是百云主机,小编将为大家推送更多相关知识点的文章,欢迎关注!

相关推荐: CTF AWD入门实例分析

这篇文章主要介绍了CTFAWD入门实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇CTFAWD入门实例分析文章都会有所收获,下面我们一起来看看吧。AWD赛制是一种网络安全竞赛的赛制。AWD赛制由安全竞赛专家及行业专家凭借十多…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/25 18:27
下一篇 03/25 18:38

相关推荐