多线程专题
文章平均质量分 83
吕布辕门
逆水行舟,不进则退!
展开
-
【JAVA多线程】ConcurrentLinkedQueue源码分析
ConcurrentLinkedQueue基于链接节点的无界线程安全队列。此队列对元素进行 FIFO(先进先出)排序。队列的*头部*是在队列中时间最长的元素。队列的*尾部*是在队列中时间最短的元素。新元素被插入到队列的尾部,队列检索操作获取队列头部的元素。`ConcurrentLinkedQueue`当许多线程将共享对公共集合的访问时,A是一个合适的选择。与大多数其他并发集合实现一样,此类不允许使用`null`元素。此实现采用了一种有效*的非阻塞* 算法原创 2022-05-08 09:00:00 · 233 阅读 · 0 评论 -
【JAVA多线程】PriorityBlockingQueue源码分析
PriorityBlockingQueue是一个无界队列,它没有限制,在内存允许的情况下可以无限添加元素;它又是具有优先级的队列,是通过构造函数传入的对象来判断,传入的对象必须实现comparable接口。原创 2022-05-07 18:11:25 · 216 阅读 · 0 评论 -
【JAVA多线程】DelayQueue 源码分析
非常适合指定时间之后,才能让消费者获取到的场景。队列 的*头部*`Delayed`是过去延迟过期最远的元素。如果没有延迟过期,则没有 head`poll` 并将返回`null`。当元素的 `getDelay(TimeUnit.NANOSECONDS)`方法返回的值小于或等于零时,就会发生过期。即使无法使用`take`or`poll`删除未过期的元素,它们也会被视为普通元素。例如,该`size`方法返回过期和未过期元素的计数。此队列不允许空元素。原创 2022-05-06 12:32:00 · 376 阅读 · 0 评论 -
【JAVA多线程】LinkedBlockingQueue 源码分析
基于链接节点的可选有界阻塞队列。此队列对元素进行 FIFO(先进先出)排序。队列的*头部*是在队列中时间最长的元素。队列的*尾部*是在队列中时间最短的元素。新元素被插入到队列的尾部,队列检索操作获取队列头部的元素。链接队列通常比基于数组的队列具有更高的吞吐量,但在大多数并发应用程序中性能更不可预测。可选的容量绑定构造函数参数用作防止过度队列扩展的一种方式。容量,如果未指定,则等于`Integer.MAX_VALUE`。链接节点在每次插入时动态创建,除非这会使队列超出容量。原创 2022-05-02 09:30:00 · 464 阅读 · 0 评论 -
【JAVA多线程】ArrayBlockingQueue 源码分析
由数组支持的有界阻塞队列。此队列对元素进行 FIFO(先进先出)排序。队列的 *头部*是在队列中时间最长的元素。队列的*尾部*是在队列中时间最短的元素。新元素被插入到队列的尾部,队列检索操作获取队列头部的元素。这是一个经典的“有界缓冲区”,其中一个固定大小的数组保存由生产者插入并由消费者提取的元素。一旦创建,容量将无法更改。尝试将`put`一个元素放入一个完整的队列将导致操作阻塞;尝试`take`从空队列中获取元素同样会阻塞。原创 2022-05-03 07:45:00 · 233 阅读 · 0 评论 -
【JAVA多线程】ThreadLocal源码分析
此类提供线程局部变量。这些变量不同于它们的正常对应变量,因为每个访问一个(通过它的 `get`或`set`方法)的线程都有它自己的、独立初始化的变量副本。 `ThreadLocal`实例通常是希望将状态与线程的类中的私有静态字段(例如,用户 ID)相关联。场景:一般在连接池优化上会使用到ThreadLocal,避免使用同步,提高性能。原创 2022-05-04 08:15:00 · 218 阅读 · 0 评论 -
【JAVA多线程】Thread 源码分析
*线程*是程序中的执行线程。Java 虚拟机允许应用程序同时运行多个执行线程。每个线程都有一个优先级。具有较高优先级的线程优先于具有较低优先级的线程执行。每个线程可能会也可能不会被标记为守护进程。当在某个线程中运行的代码创建一个新`Thread`对象时,新线程的优先级最初设置为等于创建线程的优先级,并且当且仅当创建线程是守护进程时,它才是守护线程。有两种方法可以创建一个新的执行线程。一种是将类声明为`Thread`。创建线程的另一种方法是声明一个实现`Runnable`接口的类。原创 2022-05-05 09:15:00 · 642 阅读 · 0 评论