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) {
//
}
}
}
注意:上述三种情况,锁都是加在对象上面的。
| 作用范围 |
锁对象 |
本文探讨了Java中的两种主要加锁机制——synchronized关键字和java.util.concurrent.Lock接口(以ReentrantLock为例)。synchronized通过monitorenter/monitorexit字节码指令实现,而Lock利用Java代码和Unsafe本地调用完成。synchronized可应用于静态方法、非静态方法和代码块。锁是加在对象上的,对象头的Mark Word与锁密切相关。文章还介绍了如何使用JPS、JDB和HSDB等工具进行Java进程和锁状态的检查。
最低0.47元/天 解锁文章
781

被折叠的 条评论
为什么被折叠?



