在 Java 5.0 之前,在协调对共享对象的访问时可以使用的机制只有 synchronized
内置锁和 volatile
关键字。
Java 5.0 增加了一种新的机制:Lock
显式锁,当内置锁 synchronized
不适用时,它就可以作为一种新的选择。
回顾一下内置锁 synchronized 的使用:
// synchronized关键字用法示例
public synchronized void add(int t){// 同步方法
this.v += t;
}
public static synchronized void sub(int t){// 同步静态方法
value -= t;
}
public int decrementAndGet(){
synchronized(obj){// 同步代码块
return --v;
}
}
内置锁不需要显式的获取和释放,任何一个对象都能作为一把内置锁。
- 当 synchronized 作用于普通方法时,锁对象是 this 。
- 当 synchronized 作用于静态方法时,锁对象是当前类的 Class 对象。
- 当 synchronized 作用于代码块时,锁对象是 synchronized(obj) 中的这个 obj 对象。
[阅读全文]