可重入锁 公平锁 读写锁、CLH队列、CLH队列锁、自旋锁、排队自旋锁、MCS锁、CLH锁
摘要:1.可重入锁 如果锁具备可重入性,则称作为可重入锁。 (转)可重入和不可重入 2011-10-04 21:38 这种情况出现在多任务系统当中,在任务执行期间捕捉到信号并对其进行处理时,进程正在执行的指令序列就被信号处理程序临时中断。如果从信号处理程序返回,则继续执行进程断点处的正常指令序列,从重新恢
阅读全文
posted @
2017-01-03 10:44
duanxz
阅读(3379)
推荐(0) 编辑
Java多线程系列--“JUC锁”11之 Semaphore信号量的原理
摘要:一、Semaphore简介 Semaphore是一个计数信号量,它的本质是一个"共享锁",是基于AQS实现的,通过state变量来实现共享。通过调用acquire方法,对state值减去一,当调用release的时候,对state值加一。当state变量小于0的时候,在AQS队列中阻塞等待。 信号量
阅读全文
posted @
2016-11-14 22:15
duanxz
阅读(1065)
推荐(0) 编辑
Java多线程系列--“JUC锁”10之 CyclicBarrier原理和示例
摘要:CyclicBarrier简介 CyclicBarrier是一个同步辅助类,CyclicBarrier,就是一个计数器栅栏,也就是一个计数器开关。允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。因为该 barrier 在释放等待线程后可以重用,所以称它为循
阅读全文
posted @
2016-11-14 22:14
duanxz
阅读(570)
推荐(0) 编辑
Java多线程系列--“JUC锁”09之 CountDownLatch原理和示例
摘要:概要 前面对"独占锁"和"共享锁"有了个大致的了解;和ReadWriteLock.ReadLock一样,CountDownLatch的本质也是一个"共享锁"。 CountDownLatch简介 CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程
阅读全文
posted @
2016-11-14 22:13
duanxz
阅读(554)
推荐(1) 编辑
Java多线程系列--“JUC锁”08之 共享锁和ReentrantReadWriteLock
摘要:ReadWriteLock 和 ReentrantReadWriteLock介绍 ReadWriteLock,顾名思义,是读写锁。它维护了一对相关的锁 — — “读取锁”和“写入锁”,一个用于读取操作,另一个用于写入操作。“读取锁”用于只读操作,它是“共享锁”,能同时被多个线程获取。“写入锁”用于写
阅读全文
posted @
2016-11-14 22:13
duanxz
阅读(577)
推荐(0) 编辑
Java多线程系列--AQS之 LockSupport
摘要:concurrent包是基于AQS (AbstractQueuedSynchronizer)框架的,AQS(JAVA CAS原理、unsafe、AQS)框架借助于两个类: Unsafe(提供CAS操作) 《AQS之:Unsafe(java可直接操作内存(),挂起与恢复,CAS操作)》 LockSup
阅读全文
posted @
2016-11-14 22:12
duanxz
阅读(1390)
推荐(0) 编辑
Java多线程系列--“JUC锁”05之 非公平锁
摘要:概要 前面两章分析了"公平锁的获取和释放机制",这一章开始对“非公平锁”的获取锁/释放锁的过程进行分析。内容包括:参考代码获取非公平锁(基于JDK1.7.0_40)释放非公平锁(基于JDK1.7.0_40)关于锁的数据结构请参考"Java多线程系列--“JUC锁”03之 公平锁(一) ",锁的使用示
阅读全文
posted @
2016-11-14 22:11
duanxz
阅读(466)
推荐(0) 编辑
Java多线程系列--“JUC锁”06之 Condition条件
摘要:Condition介绍 Condition的作用是对锁进行更精确的控制。Condition中的await()方法相当于Object的wait()方法,Condition中的signal()方法相当于Object的notify()方法,Condition中的signalAll()相当于Object的n
阅读全文
posted @
2016-11-14 22:11
duanxz
阅读(464)
推荐(1) 编辑
Java多线程系列--“JUC锁”04之 公平锁(二)
摘要:概要 前面一章,我们学习了“公平锁”获取锁的详细流程;这里,我们再来看看“公平锁”释放锁的过程。内容包括:参考代码释放公平锁(基于JDK1.7.0_40) “公平锁”的获取过程请参考“Java多线程系列--“JUC锁”03之 公平锁(一)”,锁的使用示例请参考“Java多线程系列--“JUC锁”02
阅读全文
posted @
2016-11-14 22:09
duanxz
阅读(496)
推荐(0) 编辑
Java多线程系列--“JUC锁”03之 公平锁(一)
摘要:概要 本章对“公平锁”的获取锁机制进行介绍(本文的公平锁指的是互斥锁的公平锁),内容包括:基本概念ReentrantLock数据结构参考代码获取公平锁(基于JDK1.7.0_40) 一. tryAcquire() 二. addWaiter() 三. acquireQueued() 四. selfIn
阅读全文
posted @
2016-11-14 22:08
duanxz
阅读(547)
推荐(0) 编辑
Java多线程系列--“JUC锁”02之 互斥锁ReentrantLock
摘要:ReentrantLock介绍 ReentrantLock是一个可重入的互斥锁,又被称为“独占锁”。 顾名思义,ReentrantLock锁在同一个时间点只能被一个线程锁持有;而可重入的意思是,ReentrantLock锁,可以被单个线程多次获取。ReentrantLock分为“公平锁”和“非公平锁
阅读全文
posted @
2016-11-14 22:07
duanxz
阅读(669)
推荐(2) 编辑
Java多线程系列--“JUC锁”01之 框架
摘要:本章,我们介绍锁的架构;后面的章节将会对它们逐个进行分析介绍。目录如下:01. Java多线程系列--“JUC锁”01之 框架02. Java多线程系列--“JUC锁”02之 互斥锁ReentrantLock03. Java多线程系列--“JUC锁”03之 公平锁(一)04. Java多线程系列--
阅读全文
posted @
2016-11-11 17:35
duanxz
阅读(705)
推荐(1) 编辑
JDK实现的线程池之一:ThreadPoolExecutor、三种阻塞队列、四种拒绝策略、五种线程池、七个参数、线程池状态
摘要:一、concurrent包中的五种线程池的简单介绍 二、ThreadPoolExecutor类七个参数 三、三种阻塞队列四、四种拒绝策略 五、线程池executor执行逻辑 一、concurrent包中的五种线程池的简单介绍 线程池按照线程数量可以分为:一是固定线程数量的线程池;二是可变数量的线程池
阅读全文
posted @
2015-12-16 11:51
duanxz
阅读(1555)
推荐(1) 编辑
AOP+Semaphore实现单节点的接口(方法)限流
摘要:AOP+Semaphore 对项目限流 Semaphore限流是从线程的个数限流。 RateLimiter是从速率限流,目前的算法有漏桶算法和令牌算法。 0、依赖 1、自定义注解 @Target({ ElementType.METHOD, ElementType.TYPE }) @Retention
阅读全文
posted @
2015-05-09 09:09
duanxz
阅读(524)
推荐(0) 编辑
Java 信号量 Semaphore 入门介绍
摘要:一、简介二、概念 2.1、Semaphore信号量模型 2.2、Semaphore分为单值和多值两种,前者只能被一个线程获得,后者可以被若干个线程获得 2.3、公平/非公平模式 2.4、主要的方法三、Semaphore应用场景 示例-1:Semaphore可以做到一个deadlock recover
阅读全文
posted @
2015-05-09 08:30
duanxz
阅读(1964)
推荐(0) 编辑
juc-atomic原子类之七:LongAdder
摘要:LongAdder基本原理和思想 我们都知道AtomicLong是通过无限循环不停的采取CAS的方法去设置value,直到成功为止。那么当并发数比较多或出现更新热点时,就会导致CAS的失败机率变高,重试次数更多,越多的线程重试,CAS失败的机率越高,形成恶性循环,从而降低了效率。而LongAdder
阅读全文
posted @
2014-05-14 21:26
duanxz
阅读(663)
推荐(0) 编辑
锁分类(独占锁、分拆锁、分离锁、分布式锁)
摘要:一、java内存模型 提到同步、锁,就必须提到Java的内存模型,为了提高程序的执行效率,java也吸收了传统应用程序的多级缓存体系。 在共享内存的多处理器体系架构中,每个处理器都拥有自己的缓存,并且定期地与主内存进行协调。在不同的处理器架构中提供了不同级别的缓存一致性(Cache Coherenc
阅读全文
posted @
2014-03-03 15:59
duanxz
阅读(5614)
推荐(1) 编辑
Lock的实现原理
摘要:1. Lock 的简介及使用 Lock是java 1.5中引入的线程同步工具,它主要用于多线程下共享资源的控制。本质上Lock仅仅是一个接口(位于源码包中的java\util\concurrent\locks中),它包含以下方法 Lock有三个实现类,一个是ReentrantLock,另两个是Ree
阅读全文
posted @
2014-02-21 15:23
duanxz
阅读(13266)
推荐(0) 编辑
Condition-线程通信更高效的方式
摘要:Lock可以更好的解决线程同步问题,使之更面向对象,并且ReadWriteLock在处理同步时更强大,那么同样,线程间仅仅互斥是不够的,还需要通信,本篇的内容是基于上篇之上,使用Lock如何处理线程通信。 那么引入本篇的主角,Condition,Condition 将 Object 监视器方法(wa
阅读全文
posted @
2014-01-06 11:06
duanxz
阅读(1345)
推荐(0) 编辑
juc原子类之五:AtomicLongFieldUpdater原子类
摘要:概要 AtomicIntegerFieldUpdater, AtomicLongFieldUpdater和AtomicReferenceFieldUpdater这3个修改类的成员的原子类型的原理和用法相似。本章以对基本类型的原子类进行介绍。内容包括:AtomicLongFieldUpdater介绍和
阅读全文
posted @
2013-12-13 10:18
duanxz
阅读(464)
推荐(0) 编辑