多线程中的锁
1、java中什么是显式锁?
1、java中显式锁就是实现lock接口的对象,比如这个对象ReentrantLock。
2、在代码中它在代码中更容易看到锁,只需要lock方法上锁,unlock方法解锁就行
3、它的底层依赖于特定的cpu,可以认为不受JVM的影响。
4、它是可以中断的锁
5、选择下一个线程是非抢占式的,按照线程的排队顺序
2、java中什么是隐式锁
1、有synchronized修饰的锁,同步代码块的方式或者同步方法的方式
2、它是非中断的锁,一旦运行不能被中断,只能等它运行结束
3、在线程发生异常的时候,会自动释放锁,不会发生异常死锁
4、底层依赖于软件层面上的jvm
5、选择下一个程序是抢占式的,下一个线程随机选择
3、显式锁和隐式锁的区别
显式锁 | 隐式锁 | |
---|---|---|
能否中断 | 能 | 不能 |
线程异常,能否自动释放锁 | 不能 | 能 |
是否依赖jvm | 是 | 不是 |
加锁是否公平 | 公平或者不公平 | 不公平 |
4、选择哪个会更好呢?
选择lock更好一点:
1、lock更符合我们的面对对象思想去操作锁
2、lock运行效率比synchronize更高一些