以下是代码段
public class ITC3 extends Thread {
private ITC4 it;
public ITC3(ITC4 it){
this.it = it;
}
public static void main(String[] args) {
ITC4 itr = new ITC4();
System.out.println("name is:" + itr.getName());
ITC3 i = new ITC3(itr);
ITC3 ii = new ITC3(itr);
i.start(); ii.start();
//iii.start();
try{
Thread.sleep(1000);
}catch(InterruptedException ie){}
itr.start();
}
public void run(){
synchronized (it){
try{
System.out.println("Waiting - " + Thread.currentThread().getName());
it.wait();
System.out.println("Notified " + Thread.currentThread().getName());
}catch (InterruptedException ie){}
}
}
}
class ITC4 extends Thread{
public void run(){
try{
System.out.println("Sleeping : " + this);
Thread.sleep(3000);
synchronized (this){
this.notify();
}
}catch(InterruptedException ie){}
}
}
给出的输出是
Output:
Waiting - Thread-1
Waiting - Thread-2
Sleeping : Thread[Thread-0,5,main]
Notified Thread-1
Notified Thread-2
在此通知所有线程。我无法理解这里的整个输出 案件。
任何指针都会有所帮助。
感谢。
答案 0 :(得分:3)
您正在Thread
的实例上进行同步。如果您选中the documentation,则会在Thread
方法完成时看到run
实例通知。这就是join
机制的实现方式。
执行一个显式notify
调用(我们在代码中看到的调用),并在执行完线程时执行另一个隐式notifyAll
调用。您甚至可以删除明确的notify
,并且由于最后的隐式notifyAll
,行为不会发生变化。
答案 1 :(得分:1)