并发
文章平均质量分 75
我还没秃,还能学
这个作者很懒,什么都没留下…
展开
-
LinedBlockingQueue 源码解析
构造方法 public LinkedBlockingQueue() { this(Integer.MAX_VALUE); }空参构造方法,也就是说没有传入大小,队列的大小默认为Integer的最大值属性 private final int capacity;//容量 private final AtomicInteger count = new AtomicInteger();//存储的元素个数 transient Node<E> head原创 2021-01-04 15:22:54 · 125 阅读 · 1 评论 -
ScheduledThreadPoolExecutor 源码解析
概述ScheduledThreadPoolExecutor 常常用来作为延迟任务,或者是周期性执行某个任务延迟任务简单的使用示如下,如果需要周期性执行任务,使用 scheduleAtFixedRate() public static void main(String[] args) throws ClassNotFoundException, ExecutionException, InterruptedException { ScheduledThreadPoolExecutor s原创 2021-01-04 14:22:56 · 135 阅读 · 0 评论 -
Callable 源码解析
概述这里Callable 的使用以 FutureTask 举例,源码示例如下 public static void main(String[] args) throws ClassNotFoundException, ExecutionException, InterruptedException { FutureTask futureTask = new FutureTask(new Callable() { @Override pub原创 2021-01-04 13:03:16 · 274 阅读 · 0 评论 -
ArrayBlockingQueue 源码解析
ArrayBlockingQueue 属性首先来看看ArrayBlockingQueue 的属性public class ArrayBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.Serializable { private static final long serialVersionUID = -817911632652898426原创 2020-12-31 00:11:18 · 158 阅读 · 2 评论 -
Condition源码解析
Condition的作用Condition 的 await/signal 的作用类似于synchronized 的 wait/notify ,是ReentrantLock 提供的一套等待唤醒机制,当时与synchronized不同的是,Condition的唤醒功能比其更加精确,可以精确的做到唤醒某个正在等待的线程Condition的数据结构public interface Condition { void await() throws InterruptedException; voi原创 2020-11-03 11:21:32 · 255 阅读 · 0 评论 -
ReentrantLock源码解析
什么是AQS队列同步器AbstractQueuedSynchronizer(以下简称同步器),是用来构建锁或者其他同步组 件的基础框架,它使用了一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获 取线程的排队工作,同步器是实现锁(也可以是任意同步组件)的关键,在锁的实现中聚合同步器,利用同步 器实现锁的语义,可以这样理解二者之间的关系:锁是面向使用者的,它定义了使用者与锁交 互的接口(比如可以允许两个线程并行访问),隐藏了实现细节;同步器面向的是锁的实现者, 它简化了锁的实现方式,屏蔽了同原创 2020-11-02 23:07:02 · 126 阅读 · 2 评论 -
copyonwriteArrayList 源码解析
copyonwriteArrayList 源码解析copyonwriteArrayList本身是比较消耗内存的 ,因为可能存两份写时复制:写操作的时候,会将list复制一份做写操作,操作完赋值回去 会在我们对copyonwriteArrayList操作的时候加锁,这里的加锁是不会阻塞读操作的适合读多写少的操作,因为再写的时候会将list复制一份,复制的过程就比较消耗性能同时对数据的一致性要求不是特别高,因为在修改一份数据的时候我们涉及到复制,然后加锁修改,然后再将脏数据更新这一连串操作pu原创 2020-09-13 20:04:00 · 131 阅读 · 0 评论 -
线程池提交任务和执行任务源码解析(2)
概述因为篇幅太长所以分两篇博客进行说明,本文算是对《线程池提交任务和执行任务源码解析》的补充第一篇博客《线程池提交任务和执行任务源码解析》—》https://blog.csdn.net/kznsbs/article/details/111958345继续execute()方法的说明 public void execute(Runnable command) { ... int c = ctl.get(); if (workerCountOf(c)原创 2020-12-30 23:01:51 · 96 阅读 · 0 评论 -
线程池提交任务和执行任务源码解析
线程池提交我们就按照平时使用的方式,从execute()这以execute这个方法为入口 public void execute(Runnable command) { ... int c = ctl.get(); if (workerCountOf(c) < corePoolSize) { if (addWorker(command, true)) return;原创 2020-12-30 14:23:10 · 209 阅读 · 0 评论