声明: 1、该篇只是提供一种自定义线程池的实现方式,可能性能、安全等方面需要优化; 2、该篇自定义线程池使用Lock(可重入锁ReentrantLock)结合Condition来实现; 3、该篇力求使用简单的方式呈现,如有错误之处,欢迎指正,在此表示感谢。 概述 自定义线程池三要素包括: 1、存储线 ...
分类:
编程语言 时间:
2016-04-20 19:51:02
阅读次数:
375
摘要 从使用场景的角度出发来介绍对ReentrantLock的使用,相对来说容易理解一些。 场景1:如果发现该操作已经在执行中则不再执行(有状态执行) a、用在定时任务时,如果任务执行时间可能超过下次计划执行时间,确保该有状态任务只有一个正在执行,忽略重复触发。b、用在界面交互时点击执行较长时间请求 ...
分类:
其他好文 时间:
2016-04-12 22:21:13
阅读次数:
183
可重入锁,也叫做递归锁,是指在一个线程中可以多次获取同一把锁,比如:一个线程在执行一个带锁的方法,该方法中又调用了另一个需要相同锁的方法,则该线程可以直接执行调用的方法【即可重入】,而无需重新获得锁;https://www.zhihu.com/question/23284564/answer/296 ...
分类:
其他好文 时间:
2016-04-12 22:20:17
阅读次数:
281
1. 重入锁的概念与作用 reentrant 锁意味着什么呢?简单来说,它有一个与获取锁相关的计数器,如果已占有锁的某个线程再次获取锁,那么lock方法中将计数器就加1后就会立刻返回。当释放锁时计数器减1,若计数器不为0,说明线程仍然占有锁;若计数器值为0,线程才会真正释放锁。 可重入锁可以避免同一...
分类:
其他好文 时间:
2015-12-25 23:49:33
阅读次数:
254
在所有的线程同步方法中,恐怕互斥锁(mutex)的出场率远远高于其它方法。互斥锁的理解和基本使用方法都很容易,这里不做更多介绍了。Mutex可以分为递归锁(recursive mutex)和非递归锁(non-recursive mutex)。可递归锁也可称为可重入锁(reentrant mutex....
分类:
其他好文 时间:
2015-11-18 19:47:02
阅读次数:
165
可重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍可以获取该锁而不受影响。在JAVA环境下 ReentrantLock 和synchronized 都是 可重入锁。[java]public class Test implements Runnable{public sync...
分类:
编程语言 时间:
2015-11-09 01:31:39
阅读次数:
370
锁:分布式的锁全局同步,这意味着任何一个时间点不会有两个客户端都拥有相同的锁。1.可重入锁Shared Reentrant Lock 首先我们先看一个全局可重入的锁(可以多次获取,不会被阻塞)。Shared意味着锁是全局可见的,客户端都可以请求锁。Reentrant和JDK的ReentrantLoc...
分类:
其他好文 时间:
2015-11-02 23:10:25
阅读次数:
451
下面的代码来自《Python核心编程》(第二版)一书。threading模块对象说明Thread表示一个线程的执行的对象Lock锁原语对象(跟thread模块里的锁原语对象相同)RLock可重入锁对象。使单线程可以再次获得已经获得了的锁(递归锁定)Condition条件变量对象能让一个线程停下来,等待..
分类:
编程语言 时间:
2015-09-23 19:36:07
阅读次数:
267
1.可重入锁如果锁具备可重入性,则称作为可重入锁。像synchronized和ReentrantLock都是可重入锁,可重入性在我看来实际上表明了锁的分配机制:基于线程的分配,而不是基于方法调用的分配。举个简单的例子,当一个线程执行到某个synchronized方法时,比如说method1,而在me...
分类:
其他好文 时间:
2015-08-27 13:02:06
阅读次数:
225
一次聊天,谈到了死锁的解决、可重入锁等等,突然发现这些离自己很远,只有一些读书时的概念涌入脑海,但各自的应用场景怎么都无法想出。痛定思痛,决定看看concurrent包里涉及并发的类及各自的应用场景。第一类:原子操作类的atomic包,里面包含了1)布尔类型的AtomicBoolean2)整型Ato...
分类:
编程语言 时间:
2015-08-11 13:34:48
阅读次数:
205