作者oishii (喔帅)
看板java
标题一个关於thread的问题
时间Thu Jul 13 23:17:29 2006
有一程式码如下
public class A extends Thread{
B b;
public A (B bb){
b = bb;
}
public void run(){
synchronized(b){
try{
wait();
} catch (InterruptionException e) {}
}
System.out.println("Completed");
}
public static void main (String[] args){
B bb = new B();
new A(bb).start();
new A(bb).start();
new A(bb).start();
bb.start();
}
}
class B extends Thread{
public void run(){
synchronized(this){
notifyAll();
}
}
}
在上面的程式里,把notify()换成notifyAll(),甚至两者都不要的结果都是一样的。
我的问题是,当notifyAll()被呼叫时,正在wait的三个thread会被awake,
但只有一个thread可以执行synchronized区块内的程式,这时候另外的两个thread
是处於什麽样的状态呢?是wait吗?还是runnable?
另外,如果把程式码中的notifyAll()换成notify(),
当这一个thread从同步区块内离开之後,并没有再呼叫notify(),
那麽在wait状态之下的thread也会自己回到runnable状态吗?
对於thread的这个部分感到困扰,还请版上的大大们协助解答了,谢谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.104.7.139