![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC
文章平均质量分 53
北航_Curry
记录、分享学习java后端的一些总结笔记和心得
展开
-
JUC包中并发安全集合
1、CopyOnWriteArrayListCopyOnWriteArrayList是并发安全的ArrayList,采用写时复制的策略 Object[]属性用来存放数组的元素 ReentrantLock属性是一个独占锁,为了保证同时只能有一个线程操作数组,实现并发安全1、add(E e)方法2、get(int index)方法先获取数组 通过下标访问数组元素整个过程没有上锁,从而导致的问题?——数据的弱一致问题 假设线程A在获取数组元素的过程中,另外一个线程B删除了这个元原创 2022-02-12 11:26:21 · 865 阅读 · 0 评论 -
CAS算法以及CAS在JUC包原子类的应用
1、CAS的引入i++不是原子操作 可以在synchronized代码块中使用i++来保证原子性,但是synchronized的获取锁和释放锁带来的上下文切换开销太大 可以通过原子类(AutomicLong)来保证原子性,同时原子类中使用了CAS算法,保证了不阻塞情况下实现原子操作2、CAS介绍CAS,compare and swap,也属于乐观锁的实现机制。 JAVA JDK中的unsafe类提供了一系列CAS操作。3、JDK中的unsafe类unsafe类中的方法都是本地(nati原创 2022-02-11 22:46:45 · 501 阅读 · 0 评论 -
Java并发编程——锁概述
1、乐观锁和悲观锁悲观锁共享资源认为数据很容易被其他任务修改,因此在操作该共享资源前首先要去获取这个共享资源的监视器锁,才会对资源进行操作。如果获取不到锁就等待。 乐观锁认为共享资源一般不容易被其他任务修改,因此直接访问资源,直到提交修改时再去检测是否有其他任务修改了该资源。2、公平锁和非公平锁公平锁是指各个线程获取锁的顺序是按照申请锁的顺利来的,最早申请锁的线程首先获得锁 非公平锁不一定是按先到先得的顺序ReentrantLock提供了公平锁和非公平锁的实现:默认是非公平锁:Reen原创 2022-02-11 22:46:53 · 264 阅读 · 0 评论