02 synchronized
使用方式
public class T {
private int count = 10;
private Object o = new Object();
private void m1() {
// 任何线程需要执行下面代码,需要拿到 o 的锁
synchronized (o) {
count--;
System.out.println(Thread.currentThread().getName() + " count = " + count);
}
}
private void m2() {
// 使用 this 对象,而不需要手动创建 o 对象
// 任何线程需要执行下面代码,需要拿到 this 的锁
synchronized (this) {
count--;
System.out.println(Thread.currentThread().getName() + " count = " + count);
}
}
// 等同于 synchronized (this)
private synchronized void m3() {
count--;
System.out.println(Thread.currentThread().getName() + " count = " + count);
}
}一些栗子
0x01 丢失的请求数
0x02 脏读
0x03 同步与非同步方法同时调用
0x04 同步方法调用
0x05 子类调用父类同步锁
0x06 异常释放锁
语句优化
锁对象改变
避免字符串作为锁对象
面试题
0x01 元素监听
最后更新于