04 2018 档案

摘要:在深入理解乐观锁与悲观锁一文中我们介绍过锁。本文在这篇文章的基础上,深入分析一下乐观锁的实现机制,介绍什么是CAS、CAS的应用以及CAS存在的问题等。 线程安全众所周知,Java是多线程的。但是,Java对多线程的支持其实是一把双刃剑。一旦涉及到多个线程操作共享资源的情况时,处理不好就可能产生线程 阅读全文
posted @ 2018-04-27 15:26 yifanSJ 阅读(347) 评论(0) 推荐(0) 编辑
摘要:注意:在阅读本文之前或在阅读的过程中,需要用到ReentrantLock 1、对于ArrayBlockingQueue需要掌握以下几点 创建 入队(添加元素) 出队(删除元素) 2、创建 public ArrayBlockingQueue(int capacity, boolean fair) pu 阅读全文
posted @ 2018-04-25 23:24 yifanSJ 阅读(157) 评论(0) 推荐(0) 编辑
摘要:ReentrantLock.lockInterruptibly允许在等待时由其它线程调用等待线程的Thread.interrupt方法来中断等待线程的等待而直接返回,这时不用获取锁,而会抛出一个InterruptedException。 ReentrantLock.lock方法不允许Thread.i 阅读全文
posted @ 2018-04-25 12:04 yifanSJ 阅读(957) 评论(0) 推荐(0) 编辑
摘要:先上两个图: 图一:ReentrantLock结构图 图二:公平锁和非公平锁流程图 公平锁 和 非公平锁的区别: 公平锁中,每一次的tryAcquire都会检查CLH队列中是否仍有前驱的元素,如果仍然有那么继续等待,通过这种方式来保证先来先服务的原则; 非公平锁,首先是检查并设置锁的状态,这种方式会 阅读全文
posted @ 2018-04-25 11:06 yifanSJ 阅读(289) 评论(0) 推荐(0) 编辑
摘要:最常用的方式: int a = 12; //注意:通常情况下,这个会设置成一个类变量,比如说Segement中的段锁与copyOnWriteArrayList中的全局锁 final ReentrantLock lock = new ReentrantLock(); lock.lock();//获取锁 阅读全文
posted @ 2018-04-24 23:46 yifanSJ 阅读(201) 评论(0) 推荐(0) 编辑
摘要:最常用的方式: int a = 12; //注意:通常情况下,这个会设置成一个类变量,比如说Segement中的段锁与copyOnWriteArrayList中的全局锁 final ReentrantLock lock = new ReentrantLock(); lock.lock();//获取锁 阅读全文
posted @ 2018-04-24 17:57 yifanSJ 阅读(258) 评论(0) 推荐(0) 编辑
摘要:1、对于LinkedBlockingQueue需要掌握以下几点 创建 入队(添加元素) 出队(删除元素) 2、创建 Node节点内部类与LinkedBlockingQueue的一些属性 static class Node<E> { E item;//节点封装的数据 /** * One of: * - 阅读全文
posted @ 2018-04-22 23:48 yifanSJ 阅读(202) 评论(0) 推荐(0) 编辑
摘要:1、原子类 可以实现一些原子操作 基于CAS 下面就以AtomicInteger为例。 2、AtomicInteger 在没有AtomicInteger之前,对于一个Integer的线程安全操作,是需要使用同步锁来实现的,当然现在也可以通过ReentrantLock来实现,但是最好最方便的实现方式是 阅读全文
posted @ 2018-04-22 23:35 yifanSJ 阅读(164) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示