建筑工程 技术支持 东莞网站建设,我们的服务理念和价值观,佛山网站制作哪里好,论坛型网站怎么做一.与synchronized相比ReentrantLock具有以下四个特点: 可中断#xff1a;synchronized只能等待同步代码块执行结束#xff0c;不可以中断#xff0c;强行终断会抛出异常, 而reentrantlock可以调用线程的interrupt方法来中断等待#xff0c;继续执行下面的代码。 在获取锁…一.与synchronized相比ReentrantLock具有以下四个特点: 可中断synchronized只能等待同步代码块执行结束不可以中断强行终断会抛出异常, 而reentrantlock可以调用线程的interrupt方法来中断等待继续执行下面的代码。 在获取锁时能够设置等待获取的时间: 调用lock.trylock()参数可以设置等待的时间,如果在规定等待的时间里拿到了锁,就返回True,否则返回false,不会阻塞等待,代码会继续执行后续操作。 能够实现公平锁和非公平锁公平锁其实是为了解决饥饿问题当一个线程由于优先级太低的时候就可能没有办法获取到时间片 可以支持多个变量对于synchronized,搭配wait/notify来唤醒等待线程,对于keentrantLock,搭配Condition类,功能比wait/notify略强一点, synchronized唤醒时是随机唤醒一个,而Condition而言可以指定一个线程进行唤醒.
二.简单介绍一下ReentrantLock
ReentrantLock翻译成中文表示可重入锁与synchronized一样都是属于可重入锁。
可重入锁也叫做 递归锁从名字上理解字面意思就是再进入的锁重入性是指任意线程在获取到锁之后能够再次获取该锁而不会被锁阻塞首先他需要具备两个条件
线程再次获取锁所需要去识别获取锁的线程是否为当前占据锁的线程如果是则再次获取成功锁的最终释放线程重复n次获取了锁随后在第n次释放该锁后其它线程能够获取到该锁。锁的最终释放要求锁对于获取进行计数自增计数表示当前线程被重复获取的次数而被释放时计数自减当计数为0时表示锁已经成功释放。
ReentrantLock 源码分析