lock和synchorized的区别
1.synchroized是JVM层面的java内置关键字,lock是一个Java类
2.synchroized无法判断是否获取到锁,但是lock可以
3.synchroized会自动释放锁,lock需要手动释放锁
4.synchroized:如果线程1阻塞,线程2会一直等待 lock:如果线程1阻塞,线程2尝试获取不到锁会直接结束线程
5.synchroized的锁:可重入,不可中断,非公平;lock的锁:可重入,可中断,可公平可不公平。
公平锁:先等待的线程先获得锁
同步代码块和同步方法的区别
同步方法默认使用this或者当前类作为锁,同步代码块可自己设定锁(synchroized(this){})
ReenTrantLock可重入锁和Synchronized的区别和联系
区别:Synchroized是基于JVM实现的,ReenTrantLock是基于JDK实现的,说白了就类似于操作系统来控制实现和用户自己敲代码实现的区别。前者的实现是比较难见到的,后者有直接的源码可供阅读。
可重入锁
可重入锁,也叫做递归锁,指的是在同一线程内,外层函数获得锁之后,内层递归函数仍然可以获取到该锁。换一种说法:同一个线程再次进入同步代码时,可以使用自己已获取到的锁。