ata*_*man 17
static synchronized void test() { foo(); }
Run Code Online (Sandbox Code Playgroud)
等于
static void test() { synchronized(MyClass.class) { foo(); } }
Run Code Online (Sandbox Code Playgroud)
而
synchronized void test() { foo(); }
Run Code Online (Sandbox Code Playgroud)
等于
void test() { synchronized(this) { foo(); } }
Run Code Online (Sandbox Code Playgroud)
这意味着:静态方法锁定类的类对象.非静态方法锁定它们被调用的实例(默认情况下synchronized(anyOtherLock)也是如此).由于它们锁定不同的对象,因此它们不会相互阻挡.
静态方法和非静态方法上的锁定对象是不同的.静态方法使用Class对象作为锁(lock obj :) MyClass.class,而非静态方法使用实例对象作为锁定,此时方法的调用被绑定到该锁(lock obj :) this.
| 归档时间: |
|
| 查看次数: |
10917 次 |
| 最近记录: |