ThreadLocal不是JUC并发包下工具,它在java.lang包下面。多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为...
ThreadLocal不是JUC并发包下工具,它在java.lang包下面。多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为...
HashSet的结构 HastSet的底层存储结构是一个名字叫做map的HashMap,因为HashSet是单值的,非键值对,把HashSet的值用作了HashMap...
数据结构 构造函数 HashMap的底层数组,不是在构造函数里面构建的,而是在第一次put的时候,调用的resize方法里面 put方法 resize重新计算hash表大小 ...
链表节点 添加方法 在链表结尾插入新节点 将新节点作为链表的第一个节点 添加方法就写这么多了,有兴趣的自己看其他的,都是一个原理,链表节点的操作。 获取方法 获取链表指定索引...
ArrayList只写add方法了,其他的方法感兴趣的自己看一下,都比较简单。 构造函数 添加元素 需要的常量 minCapacity代表添加元素所需要的容量,等于原容量+添...
CyclicBarrier翻译过来是“可循环利用的屏障“,CyclicBarrier 作用是让一组线程相互等待,当达到一个共同点时,所有之前等待的线程再继续执行,且 ...
Semaphore也叫信号量,在JDK1.5被引入,可以用来控制同时访问特定资源的线程数量,通过协调各个线程,以保证合理的使用资源。 Semaphore和Ree...
CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程执行完后再执行。 它是通过一个计数器来实现的,计数器的初始化值为线程的数...
首先来回顾一下AQS Node的主要结构,对于节点状态PROPAGATE的无条件传播,可能不理解。看完doAcquireShared的源码就会知道了 共享模式获取锁 ...
DelayQueue是一个无界阻塞队列,可以用做延时处理,延时处理就是可以为队列中元素设定一个过期时间,队列中的元素按照自定义的delay时间进行排序,其中的元素只有...
SynchronousQueue是一个内部只能包含一个元素的队列。插入元素到队列的线程被阻塞,直到另一个线程从队列中获取了队列中存储的元素。同样,如果线程尝试获取元...
PriorityBlockingQueue是一个支持优先级的无界阻塞队列,基于数组的二叉堆,其实就是线程安全的PriorityQueue。 指定元素排序的规则...
LinkedBlockingQueue是一个单向链表实现的阻塞队列。该队列按 FIFO(先进先出)排序元素,新元素插入到队列的尾部,并且队列获取操作会获得位于队列头部...
ArrayBlockingQueue是数组实现的线程安全的有界的阻塞队列。下面是主要结构。 大概思想就是使用items数组存放元素,使用ReentrantLoc...
ReentrantLock意思为可重入锁,指的是一个线程能够对一个临界资源重复加锁。借用美团技术博客的一张图说明它和Synchronized的区别 Reentrant...
ConditionObject主要是为并发编程中的同步提供了等待通知的实现方式,可以在不满足某个条件的时候挂起线程等待(await)。直到满足某个条件的时候在唤醒线程...
在独占模式下释放锁 和tryAcquire一样,tryRelease也需要子类去实现
下面我们借助上面的API图阅读源码 独占模式获取锁acquire,忽略中断 tryAcquire是需要子类必须重写的方法,如果不重写就会抛出UnsupportedOperat...
AQS是啥 Java中的大部分同步类(Lock、Semaphore、ReentrantLock等)都是基于AbstractQueuedSynchronizer(简称为...
ConvertKits是一款提高开发效率的自动生成代码的工具,第一版只提供了简单的功能,会不停的优化,感谢IDEA社区! 我们在需求开发过程中,尤其是Sprin...