![]() |
1
9
你错了-锁是在 实例 水平。示例中只有一个锁,因为当您说:
您可以查看锁(也称为
监测器
,
互斥器
或
信号量
)单独“附加”到
如果你有另一个
这也适用于另一个
|
![]() |
2
5
相同:
您锁定的是实例,而不是类。所以当调用super.dosomething()时,您已经锁定了该实例。 |
![]() |
3
1
只有一个实例可以获取锁,即
当你呼叫时获得锁
|
![]() |
4
0
重入是通过首先获取锁来工作的。当一个线程获得锁时,它在JVM中是已知的。当输入与当前持有锁的线程同步的代码块时,允许它们继续执行而不重新获取锁。然后,JVM会增加每个可重入操作的计数器,当退出该块时,计数器会进一步减少,直到计数为零。当计数为零时,锁被释放。 |
![]() |
5
0
B.Goetz-“JJava实践中的并发性”如果内部锁不可重入,则对super.dosomething的调用将永远无法获取锁,因为它将被视为已被持有,并且线程将永久停止,等待它永远无法获取的锁。在这种情况下,重入可以避免死锁。 |
![]() |
a a · 为什么在这个可重入锁示例中需要引用计数? 3 年前 |
![]() |
Grant · goroutines有高空闲唤醒电话 3 年前 |
![]() |
hoaz · 如何安全地清理并发映射 7 年前 |
![]() |
Alanpatchi · int基元类型的volatile声明 7 年前 |