xpl*_*raj 3 java multithreading synchronization thread-synchronization
public void method(Type1 inst1, Type2 inst2) {
synchronized(inst1) {
synchronized(inst2) {
//do something now
}
}
}
Run Code Online (Sandbox Code Playgroud)
从这段代码中我可以理解,一旦一个线程进入该方法,它会在inst1上获取锁,然后在inst2上获取锁,不会释放inst1锁。我假设这两个对象都没有被其他线程锁定。
1 . 如果一个线程一次只能获取一个对象的锁,并且当当前对象的锁被释放时只能拥有另一个锁,那么这段代码如何有效,或者更确切地说,它是我认为我见过的有效代码某处?
这是一个有效的代码,锁不在方法所在的对象上,而是在inst1和 上inst2。此外,锁不在类上,而是针对每个对象
2 . 如果 Type1 和 Type2 相同呢?
同样,锁是在对象上,而不是在类上。如果 inst1 和 inst2 相同,则该线程只有一个锁,同一个线程“重新进入”该锁是有效的
3 . 如果我们使方法同步,考虑到它驻留在方法的参数类型之外的类中,会发生什么?
然后你还有另一个锁,这次是在执行方法的对象(不是类)上。
| 归档时间: |
|
| 查看次数: |
5159 次 |
| 最近记录: |