1.synchronized修饰非静态方法
- synchronized修饰普通方法实际是给该对象上锁“对象锁”
- 只有当同一个对象在两个不同的线程中访问该方法时才会产生互斥
- 不同对象可以同时访问该方法。因为锁针对的是对象,不是方法。
2.synchronized修饰静态方法
- synchronized修饰静态方法实际是对该类加锁,俗称“类锁”
- 用类直接调用修饰的方法,会产生互斥
- 因为针对的是类,所以无论怎样都会产生互斥
3.一个对象在两个线程中分别调用一个静态同步方法和一个非静态同步方法
- 因为虽然是对象同步调用,但是锁的类型不同,调用静态同步方法实际上是类对象在调用,
- 即两个同步方法产生的不是一类锁,所以不会互斥,会同步执行。