一 与 monitor 关联的对象不能为空
public class SynchronizedTest {
private final Object mutex = null;
public void syncMethod() {
synchronized (mutex) {
}
}
}
mutex 为 null,每个对象和一个 monitor 关联,对象都为 null,monitor 肯定无从谈起。
二 synchronized 作用域太大
public class SynchronizedTest implements Runnable{
private final Object mutex = null;
@Override
public synchronized void run() {
}
}
上面的代码对整个线程的执行逻辑单元都进行了 synchronized 同步,从而丧失了并发能力,synchronized 关键字应该尽可能地只作用于共享资源(数据)的读写作用域。
三 不同 monitor 企图锁相同的方法
public class SynchronizedTest implements Runnable {
private final Object mutex = null;
@Override
public void run() {
synchronized (mutex) {
}
}
public static void main(String[] a