avatar
关于死锁疑问# JobHunting - 待字闺中
k*r
1
这个死锁的例子,为什么会发生呢?bow里面的bower.bowBack(this)为什么会被block
住呢,不是两个bow function都synchronized了吗?难道说instance的另一个bowBack
也被syn了吗?
concurrency小白,勿怪。
static class Friend {
private final String name;
public Friend(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public synchronized void bow(Friend bower) {
System.out.format("%s: %s"
+ " has bowed to me!%n",
this.name, bower.getName());
bower.bowBack(this);
}
public synchronized void bowBack(Friend bower) {
System.out.format("%s: %s"
+ " has bowed back to me!%n",
this.name, bower.getName());
}
}
public static void main(String[] args) {
final Friend alphonse =
new Friend("Alphonse");
final Friend gaston =
new Friend("Gaston");
new Thread(new Runnable() {
public void run() { alphonse.bow(gaston); }
}).start();
new Thread(new Runnable() {
public void run() { gaston.bow(alphonse); }
}).start();
}
avatar
z*e
2
static class?
为什么用这个?
这个你不写我估计都忘了
avatar
j*8
3
这个不是oracle tutorial里给的例子吗
synchronized 是随instance的
这个例子里每个人hold自己的lock,然后试图获取对方的lock,所以就悲剧了

block
bowBack

【在 k****r 的大作中提到】
: 这个死锁的例子,为什么会发生呢?bow里面的bower.bowBack(this)为什么会被block
: 住呢,不是两个bow function都synchronized了吗?难道说instance的另一个bowBack
: 也被syn了吗?
: concurrency小白,勿怪。
: static class Friend {
: private final String name;
: public Friend(String name) {
: this.name = name;
: }
: public String getName() {

avatar
k*r
4
原来是这样啊,也只有这样才能发生死锁了。
所以,可以这样认为吗?因为class的定义是用了static,sync才随着instance走的吗?
如果没用static呢?

【在 j*****8 的大作中提到】
: 这个不是oracle tutorial里给的例子吗
: synchronized 是随instance的
: 这个例子里每个人hold自己的lock,然后试图获取对方的lock,所以就悲剧了
:
: block
: bowBack

avatar
j*8
5
和那没关系
要是synchronize static method 的话,就跟着class 走了

吗?

【在 k****r 的大作中提到】
: 原来是这样啊,也只有这样才能发生死锁了。
: 所以,可以这样认为吗?因为class的定义是用了static,sync才随着instance走的吗?
: 如果没用static呢?

avatar
k*r
6
那为什么在一个class里面,两个function分别sync呢?是只要进入一个function,其
他想用当前的instance的都会被block吗?
我之前一直以为就是当前的method会被lock。

【在 j*****8 的大作中提到】
: 和那没关系
: 要是synchronize static method 的话,就跟着class 走了
:
: 吗?

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。