2014-02-11 34 views
1

我希望能夠等待線程從另一個類上完成的一些計算中返回一個值。讓我來發布一些代碼:等待一個線程結果返回一個方法的值(Webapp)

public class ClassA implements Runnable{ 

public boolean threadRunning ; 
public String value ; 

public ClassA() { 
    ... 
    } 

public String getValueFromServer() { 

    //call to a method in the server that does some calculation 

    ClassB.sendPetitionToServer() ; 
    t=new Thread (this) ; 
    threadRunning = true ; 
    t.start(); 
    return value 
     } 

    public void run() 
      { 
    while(threadRunning) 
     { 
     checkValue() 
     } 
     } 


     public void checkValue() { 
     String value = ClassB.getInstance().getValue ; 
     if (value!=null) { 
     threadRunning = false ; 
     } 

    } 

    } 

的問題是,我怎麼能等待線程從法從ClassB.SendPetitionFromToServer返回一個值()? ClassB方法填充該值,但必須進行一些耗費時間(5-8秒)的計算。 ClassB不是可運行的,是一個簡單的類。也許我應該讓另一個類存儲值並通知ClassA。

總結我的問題(也許是困惑,甚至我的方法只是愚蠢的)。

我正在開發一個Java WebApp。我有一個實現Runnable接口的ClassA。這個類有一個方法,需要從另一個ClassB中檢索一些需要執行一些相當繁重的計算的信息,這需要花費一些時間(從MySQL檢索一些信息,使用info進行一些計算)。我如何才能從ClassA中停止該方法,直到獲得ClassB的響應?無論如何去做?

在此先感謝

+1

我不明白爲什麼要使用線程來處理繁重的工作,如果您仍然等待直到此線程完成工作以繼續... –

+0

要了解有關@LuiggiMendoza說,Google *線程安全*的更多信息。如果它引入競爭條件,你的線程就不安全。 – Rainbolt

+0

@John我不是在談論競爭條件,我可以這樣想:*工人A可以完成這項工作W1和W2,但是W2很重,所以我會打電話給工人B處理W2,但工人A必須等待直到工人B完成工作來繼續工作。換句話說,在這種情況下你並沒有解決性能問題,但是即使使用一個額外的線程= \。 –

回答

0

可以join()線程,然後收集由線程填充一個變量的值。

但是我反而調查ExecutorsFutures,這樣你就可以通過Executor產生一個線程,得到了Future,然後調用Future.get()。這是一個更好,更高級的從線程獲取結果的機制。

+0

非常感謝所有已回答的人。我會檢查所有提案。我對線程完全陌生,所以我的代碼應該很奇怪,但我會盡量讓它更好地尋找提議。感謝Brian :-) –

相關問題