我做了這個樣本,以測試等待/通知功能:等待不超時
public class WaitingTest implements Runnable {
Thread b = new Thread(this,"query");
int total=0;
public static void main(String[] args){
WaitingTest w = new WaitingTest();
}
public WaitingTest(){
b.start();
synchronized(b){
try{
System.out.println("Waiting for b to complete...");
b.wait(10);
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println("Total is: " + total);
}
}
@Override
public void run(){
synchronized(b){
for(int i=0; i<1000000000 ; i++){
total += i;
}
}
}
}
的問題是,我的輸出應該是零,因爲即時通訊通知10ms的等待後,我的線程時間超過它執行其工作。所以,我的輸出應該是零,而不是它的另一個值。我錯過了什麼?
編輯:
public class WaitingTest implements Runnable {
Thread b = new Thread(this,"query");
int total=0;
public static void main(String[] args){
WaitingTest w = new WaitingTest();
}
public WaitingTest(){
b.start();
synchronized(b){
try{
System.out.println("Waiting for b to complete...");
b.wait();
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println("Total is: " + total);
}
}
@Override
public void run(){
synchronized(b){
b.notify();
for(long i=0; i<100000 ; i++){
total += i;
}
}
}
}
沒有必要添加的主要標籤的稱號。 –
@VictorOliveira在你的EDIT上 - 儘管你現在在循環之前調用b.notify(),但你仍然不能得到零(在打印線程中),因爲你還沒有離開同步塊(在計算線程中) 。 –