Blocking queue with high concurrency in Java

Entry station 2021-01-21 23:36:44
blocking queue high concurrency java

brief introduction

It's easy to share data through queues in multithreading , Like the classic producer and consumer In the model , Through the queue can be very convenient to achieve data sharing . Suppose we have several producer threads , There are a number of consumer threads , Producer threads can share data with consumers through queues . But producers and consumers in a certain period of time , In case of data processing speed mismatch ? If producers produce data much faster than consumers consume data , Ideally, when the data produced by the producer reaches a threshold , So producers have to pause ( Block producer thread ), So that consumers can consume data . stay concurrent Before the package appeared , Developers have to control these details manually , It is difficult to develop high performance programs ( Efficiency and safety ). concurrent After coming out , brought BlockingQueue( In multithreading , In some cases, the thread is suspended ( Or block ), Once the conditions are met , The suspended thread will be automatically awakened again )

 Picture description here

BlockingQueue Blocking queues , It's a first in first out queue , In some cases , Access to the blocking queue can cause blocking , There are two main situations of being blocked .
  • When the pair is full , During the team entry operation . When a thread tries to queue a full queue , And it will be blocked , Unless a thread is out of the queue .
  • When the queue is empty , When you're out of the team . When a thread tries to dequeue an empty queue , And it will be blocked , There is a thread out of the queue .
Blocking queues is thread safe , It is mainly used in the scene of producers and consumers . The thread in charge of production constantly creates new objects and inserts them into the blocking queue , Until the upper limit of the queue is reached , So it's blocked , Until the consuming thread consumes the queue . Empathy , The thread in charge of consumption continuously takes out objects from the queue for consumption , Until the queue is empty , At this point, the consumption queue will be blocked , Unless a new object is added to the queue .
public interface BlockingQueue<E> extends Queue<E> {}
public interface Queue<E> extends Collection<E> {}
BlockingQueue It's an interface , Inherited from Queue, So implementation classes can also be used as Queue To use , and Queue And inherit from Collection Interface .

BlockingQueue For insertion operation , Remove operation , The get element operation provides four different methods for different scenarios , Use different methods , There will be different effects .BlockingQueue Each implementation of follows these rules .

Throws Exception Special Value Blocks Times Out
insert add(o) offer(o) put(o) offer(o,timeout,timeunit)
remove remove(o) poll() take() poll(timeout,timeunit)
examine element() peek() not applicable not applicable
  • Throws Exception: Throw an exception . If not immediately , Throw an exception .
  • Special Value: If not immediately , Then return a special value , It's usually True or False
  • Blocks: If not immediately , The operation will be blocked , Until the operation is successful
  • Times Out: If not immediately , The operation will be blocked for a specified time . If the specified time has not been executed , Then return a special value , It's usually True or False.
about BlockingQueue, The focus should be on its put and take On the way , Because these two methods are with blocking .

BlockingQueue Don't accept null Insertion of values , The corresponding method is to encounter null Will throw NullPointerException abnormal ,null Values are usually used for special value returns ( The third column in the table ), representative poll Failure . So if you allow it to be inserted null If it's worth it , When you get it , It can't be used very well null To determine whether it is a failure or to get a value of null.

BlockingQueue Realized java.util.Collection Interface , We can use remove(x) To delete any element , But this kind of operation is not efficient , So try to use it on a few occasions , For example, a message has been entered , But when you need to cancel the operation .

BlockingQueue Is thread safe , But batch set operations addAll,containsAll,retainAll,removeAll It doesn't have to be an atomic operation , Such as addAll(c) Throw an exception after adding some elements , here BlockingQueue Some elements have been added to , This is allowed , Depends on the implementation .

BlockingQueue In the producer - In the consumer scene , It supports multi consumers and multi consumers , What we're talking about is thread safety .BlockingQueue Is a relatively simple thread safe container . As BlockingQueue Users of , We no longer have to think about when to block threads , When to wake up the thread , Because of these BlockingQueue It's all done .

Unbounded queue , It's not that size is unlimited , It's just that its size is Integer.MAX_VALUE, namely int The maximum value that the type can represent (2 Of 31 Power )-1

BlockingQueue Concrete implementation class

  • ArrayBlockingQueue
  • LinkedBlockingQueue
  • DelayQueue
  • PriorityBlockingQueue
  • SynchronousQueue
What is commonly used is ArrayBlockingQueue and LinkedBlockingQueue

Pay attention to WeChat public number :【 Entry station 】, Unlock more knowledge .

本文为[Entry station]所创,转载请带上原文链接,感谢

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云