摘要:
参考书:《Java并发编程艺术》 在学习这一块知识之前,可以先学习一下JMM相关的知识,回过来再看这个问题,就很好理解:https://www.cnblogs.com/perferect/p/13680158.html volatile 特性 可见性:对一个volatile变量的读,总能看到任意线程 阅读全文
摘要:
Executor框架 在实际开发工作中,或多或少我们都用到过多线程。一般很少使用 new Thread(){run()}.start()这种创建线程。一方面影响代码规范性,另外一方面,也是不方便多线程管理。当大量任务时,线程的创建销毁都会占用很多计算资源。这也是为什么使用线程池的原因。 在日常工作中 阅读全文
摘要:
FutureTask详解 作用:用于等待一个线程执行完毕后再执行另一个线程任务。一般用于Executors框架中,最常使用的是再ThreadPoolExecutor中,进行多线程任务; 注意: JDK1.8不在使用AQS进行线程管理; 取而代之的是通过CAS进行状态的切换,waiter线程节点由堆栈 阅读全文
摘要:
ThreadLocal在平时开发中是用的比较多的一个类,主要用于存储线程的数据。下面我对ThreadLocal进行一下总结; dreamcatcher-cx大佬对ThreadLocal的设计总结,写的比较深刻,很有帮助。 主要使用场景: 多数据源切换,记录当前线程访问的数据源 spring框架事务管 阅读全文
摘要:
LockSupport用来进行线程的阻塞和唤醒。在线程的一些操作中,经常能看到相关的使用。 park,unpark 和 wait,notify的区别 方法主体不同,wait和notify是Object的方法。 LockSupport 是针对线程进行阻塞和唤醒的操作 wait,notify和LockS 阅读全文
摘要:
同一时刻允许多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞。 所有晚于写操作的读操作都会进入等待状态。 数据结构 内部类提供了读写锁的子类 public class ReentrantReadWriteLock implements ReadWriteLock, java.io 阅读全文
摘要:
ReentrantLock也叫重入锁,可以对同一线程资源进行重复加锁。通过lock()方法可以显式的加锁,并且再次调用lock(),不会出现阻塞的情况 Sync子类提供锁的基本实现机制 非公平锁的获取 获取独占锁后,增加状态码 //加锁 final void lock() { if (compare 阅读全文
摘要:
参考书:《java并发编程艺术》 参考博客:https://www.cnblogs.com/micrari/p/6937995.html 源码分析:活在夢裡 大佬写的很详细,也是我看过的AQS源码分析最好的博客了。 我就自己学习和理解的过程做一下记录。 1 数据存储结构 AQS的数据存储,是通过内部 阅读全文
摘要:
ConcurrentHashMap相较于HashMap最大的特点就是线程安全的。 这篇随笔主要了解以下ConcurrentHashMap的基本知识. 环境:JDK1.8 1.初始化 构造函数 1.可以看出默认的初始容量是16; 2.默认的平衡因子是0.75f //默认初始容量时16 private 阅读全文
摘要:
红黑树 红黑树是一种自平衡的二叉树; 红黑树必须要遵循的规则: 1.节点是红色或黑色; 2.根节点为黑色; 3.每个叶子节点都是黑色的空节点; 4.红色节点不能有红色的父节点或子节点 5.从任一节点到叶子节点的黑色节点数必须一致; 红黑树的两大操作:变色和旋转 变色:将节点的颜色由黑变红,或者由红变 阅读全文