2012-04-19 67 views
0

我已經開發了下面的Java代碼..關於通知特定線程deleibrately

class ThreadB extends Thread { 
public int totals; 

public void run() { 
    synchronized(this) { 
    for(int i=0;i<100;i++) { 
     totals += i; 
     } 
     notify(); //want to notify only thread b2 
     } 
     } 
    } 

和其他類...

 class ThreadA { 
    public static void main(String [] args) { 
    ThreadB b1 = new ThreadB(); 
    b.start(); 
ThreadB b2 = new ThreadB(); 
b2.start(); 
ThreadB b3 = new ThreadB(); 
b3.start(); 
ThreadB b4 = new ThreadB(); 
b4.start(); 

    synchronized(b) { 
    try { 
    System.out.println("Waiting for b to complete..."); 
    b1.wait(); 
b2.wait(); //only b2 to be notified 
b3.wait(); 
b4.wait(); 
    } catch (InterruptedException e) {} 
    System.out.println("Total is: " + b.totals); 
    } 
    } 
    } 

沒有請告訴我,我只想通知線程b2和b2只,我怎麼做到這一點,因爲通知線程可以拿起任何一個線程,但我只想要b2,請告知。

+0

我認爲這會有所幫助,如果你能解釋你爲什麼要這樣做。我不確定你的代碼是否可以編譯。 – 2012-04-19 18:33:56

+0

是啊同意,如果可能的話請在線程A中糾正,以便所有的線程都等待線程b完成,非常感謝 – dghtr 2012-04-20 02:35:51

回答

0

您可以通過參考b2等待運行您想要通知的線程的類。

你必須​​關於你等待()的對象。

+0

嗨,彼得,如果你能在代碼中顯示,將有助於掌握更清晰的代碼,非常感謝 – dghtr 2012-04-20 02:32:40