**散分**

willingsilly 2003-02-25 01:56:53
当然要回答我的问题哦:

有一个名为obj的Object被A、B访问(同步)

class A {

new Thread(new B()).start(); //①
//wait here
...
}

class B implements Runnable{
...
}

①处,当A所在的线程处于wait()状态时,B也同时处于wait()状态(待定,我在测试时运行到一段就不走了)。是不是因为A是B的父线程(我觉得没道理),用什么方法可以解决?
已经排除死锁的可能。
...全文
47 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
funpig 2003-02-26
  • 打赏
  • 举报
回复
up
nocturnetian 2003-02-25
  • 打赏
  • 举报
回复

orange2002 2003-02-25
  • 打赏
  • 举报
回复
up
redkey 2003-02-25
  • 打赏
  • 举报
回复
接分了
E17 2003-02-25
  • 打赏
  • 举报
回复
up
marf_cn 2003-02-25
  • 打赏
  • 举报
回复
up
willingsilly 2003-02-25
  • 打赏
  • 举报
回复
public class A {
private OO obj=new OO();
public void test(){
new Thread(new B(obj)).start();
System.out.println("getChar="+obj.getChar());
}
public static void main(String[] args) {
A a=new A();
a.test();
}
}

class OO{

private char c=' ';

public synchronized char getChar(){
try {
System.out.println("wait for char...");
wait();
System.out.println("wake up");
}
catch (InterruptedException ex) {
ex.printStackTrace();
}
return c;
}

public synchronized void setChar(char aC){
c=aC;
System.out.println("notifying...");
notify();
System.out.println("notified");
}

}


class B implements Runnable{
OO obj=null;
public B(OO obj){
this.obj=obj;
}
public void run(){
System.out.println("set Char");
obj.setChar('a');
}
}

以上是简化了的代码,输出结果为:

wait for char...

set Char

notifying...

notified

wake up

getChar=a

是正确的,为什么实际中就有问题呢?哎,测ing...

谢谢大家,回头结分。
cyicecream 2003-02-25
  • 打赏
  • 举报
回复
给分给分
lotofu 2003-02-25
  • 打赏
  • 举报
回复
同步锁何时解除,条件是否有误?
colors 2003-02-25
  • 打赏
  • 举报
回复
upupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupupupupupupupuppupup
gks_cn 2003-02-25
  • 打赏
  • 举报
回复
up
willingsilly 2003-02-25
  • 打赏
  • 举报
回复
liujuntao(为忘记你而天涯海角流浪),你睡着了?

这个问题解决不了,我也要wait了,各位好汉帮帮我触摸画册吧。

up有分!
lkenshin 2003-02-25
  • 打赏
  • 举报
回复
up应该也有分吧
willingsilly 2003-02-25
  • 打赏
  • 举报
回复
我想如果加一个类C , 让A、B“平等”就可能能解决,但是原来的代码改起来麻烦。

是不是因为B在A中创建,A 等待时 B也等待?
willingsilly 2003-02-25
  • 打赏
  • 举报
回复
bluemeteor(挂月||╭∩╮(︶︿︶)╭∩╮) ,
A wait了B当然也wait 了?为什么?
有什么办法避免呢?

willingsilly 2003-02-25
  • 打赏
  • 举报
回复
没有,
B调用obj的方法1,方法1里只有调用了notify
kofwr 2003-02-25
  • 打赏
  • 举报
回复
接分...
liujuntao 2003-02-25
  • 打赏
  • 举报
回复
同时等待,我去唤醒吧,:)
bluemeteor 2003-02-25
  • 打赏
  • 举报
回复
A wait了B当然也wait 了
没有别的event负责start A么?
zhlx1977 2003-02-25
  • 打赏
  • 举报
回复
B
加载更多回复(3)

23,407

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧