多线程
文章平均质量分 84
vXZH
这个作者很懒,什么都没留下…
展开
-
图解AbstractQueuedSynchronizer(AQS)实现原理:独占锁篇 笔记
前言原创 2021-02-24 11:54:58 · 158 阅读 · 0 评论 -
Java线程中断学习笔记
中断:代表线程的一种状态,值为true或false。默认为false,代表没有被中断。// Thread 类中的实例方法,持有线程实例引用即可检测线程中断状态public boolean isInterrupted() {}// Thread 中的静态方法,检测调用这个方法的线程是否已经中断// 注意:这个方法返回中断状态的同时,会将此线程的中断状态重置为 false// 所以,如果我们连续调用两次这个方法的话,第二次的返回值肯定就是 false 了public static boolean原创 2021-02-22 15:15:21 · 106 阅读 · 0 评论 -
CLH自旋锁的简易实现
前言我们知道,当一个线程想要申请的锁已经被其他线程持有时,那么该线程需要等待其释放锁。等待的方式有两种:一种是将线程状态置为等待状态(非RUNNABLE),另一种就是自旋了。自旋就是不断检测该锁是否被释放,而不是将线程挂起或休眠。这两种方式适用于不同的场景。当线程持有锁的时间较长时(一般情况下,也可以理解为,临界区代码较长),适合使用将线程挂起或休眠的方式,因为自旋太久会消耗大量CPU计算资源;当线程持有锁的时间较短时,适合自旋等待的方式,因为线程被挂起或休眠后需要被唤醒,而频繁的唤醒与挂起线程会导致大原创 2021-02-18 14:56:19 · 248 阅读 · 0 评论 -
JDK1.8 ConcurrentHashMap之源码分析笔记
前言JDK1.8 的ConcurrentHashMap相较于JDK1.7 的做了比较大的改动,取消了分段锁的设计。JDK8改成了Node数组+链表/红黑树,Node 是类似于一个 HashEntry 的结构。它的冲突再达到一定大小时会转化成红黑树,在冲突小于一定数量时又退回链表。同时使用了CAS和synchronized锁来保证线程安全,synchronized锁的粒度为桶中的头节点(链表Node结点或包装红黑树的TreeBin结点)。(JDK1.7 的ConcurrentHashMap分析见此篇文章)原创 2021-02-14 14:01:26 · 224 阅读 · 0 评论