Java中的锁
在 Java 中主要2种加锁机制:
synchronized 关键字
java.util.concurrent.Lock (ReentrantLock是该接口的一个常用实现)
两者在底层存在一些差别:
synchronized 是关键字,通过一对字节码指令 monitorenter/monitorexit 实现。
java.util.concurrent.Lock 利用 Java 代码和sun.misc.Unsafe 中的本地调用实现的。Unsafe 包不是Java规范的一部分。
使用 synchronized 有以下三种作用范围:
1.在静态方法上加锁
2.在非静态方法上加锁
3.在代码块上加锁,synchronized (lock)
public class MySynchronized {
private Object lock = new Object();
public synchronized static void staticMethod() {
//
}
public synchronized void nonStaticMethod() {
//
}
public void normalMethod() {
synchronized (lock) {
//
}
}
}
注意:上述三种情况,锁都是加在对象上面的。
作用范围 |
锁对象 |