大家都知道,在java中如果要对一段代码做线程安全操作,都用到了锁,当然锁的实现很多,用的比较多的是sysnchronize和reentrantLock,前者是java里的一个关键字,后者是一个java类。这两者的大致区别,在这里罗列下
相同点:
1、都能保证了线程安全性
2、都支持锁的重入
不同点:
1、synchronized适用于不是很激烈的情况,reentranLock适用于比较竞争激烈的情况
2、Synchronized是jvm层面实现的锁机制,而reentranLock是java代码层面实现的锁机制。
3、Reentranlock比synchronized多了锁投票,定时锁,中断锁等机制
4、synchronized是隐式获取锁和释放锁,不需要代码手动获取释放,Reentranlock为显示获取锁和释放锁,必须要手动代码获取释放
要了解reentranlock,那肯定先得会用它,下面通过一个例子来了解它的加锁和释放锁过程
二、demo1 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 }