ReentrantLock和condition源码浅析(一)

大家都知道,在java中如果要对一段代码做线程安全操作,都用到了锁,当然锁的实现很多,用的比较多的是sysnchronize和reentrantLock,前者是java里的一个关键字,后者是一个java类。这两者的大致区别,在这里罗列下

相同点:

       1、都能保证了线程安全性

       2、都支持锁的重入

不同点:

      1、synchronized适用于不是很激烈的情况,reentranLock适用于比较竞争激烈的情况

      2、Synchronized是jvm层面实现的锁机制,而reentranLock是java代码层面实现的锁机制。

      3、Reentranlock比synchronized多了锁投票,定时锁,中断锁等机制

      4、synchronized是隐式获取锁和释放锁,不需要代码手动获取释放,Reentranlock为显示获取锁和释放锁,必须要手动代码获取释放

要了解reentranlock,那肯定先得会用它,下面通过一个例子来了解它的加锁和释放锁过程

二、demo

1 public class Demo { 2 3 private static int count = 0; 4 5 public static void main(String[] args) throws InterruptedException { 6 ExecutorService executorService = Executors.newFixedThreadPool(15); 7 for (int i = 0; i < 500; i++){ 8 executorService.execute(() -> { 9 add(); 10 }); 11 } 12 Thread.sleep(1000); 13 System.out.println(count); 14 } 15 16 private static int add(){ 17 return ++count; 18 } 19 }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyxgjp.html