作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我们有
class A {
void m1() {
synchronized (this) {
}
blah blah blah
synchronized (this) {
}
}
}
我的疑问是,在执行blah blah blah时,当前执行对象o的线程释放了锁,此时如果其他对象o的线程获取了锁,就会出现死锁。那么我们怎么能说我们应该尝试使用同步块(synchronized block)而不是同步方法呢?
假设线程t1执行获取类级锁的静态同步方法,其他线程是否可以获取该类实例的锁来执行其他同步方法?
最佳答案
执行“blah blah blah”时,当前执行的线程不拥有任何锁。另一个线程可能会获取该对象的锁,但这不会导致死锁。第一个线程将简单地阻塞,直到另一个线程释放锁。
当线程 A 拥有锁 1 但需要锁 2,而线程 B 拥有锁 2 但需要锁 1 时,就会发生死锁。在您的情况下不会发生这种情况。
类级锁与对象实例上的锁不同。因此,类级锁不会干扰另一个线程在对象上执行其他同步方法。
关于java - 当其他线程正在执行该类的静态同步方法时,一个线程能否获取该类实例的锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19230382/
我是一名优秀的程序员,十分优秀!