2
我想寫一個程序2類,一個控制器和一個類,做了很多的計算。控制器創建另一個類的幾個實例,然後告訴他們所有人開始他們的計算(並行)。它們在完成時返回,並且控制器恢復,然後一段時間後,控制器將新數據傳遞給它們,並讓它們再次運行計算。
理想情況下,我可以用參數調用start(),但這是不可能的,所以控制器調用計算器中的一個方法,將數據存儲在全局中,然後啓動計算線程並返回,直到我嘗試再次啓動線程,並且它告訴我線程已經死亡。所以我試圖讓運行成爲一個無限循環,只等待它被通知,運行計算,將結果存儲在全局中,以便控制器可以稍後檢索它們,然後繼續等待。因此,像:new to multithreading-如何在java中使用wait()和notify()?
//in controller:
Calculator calc=new Calculator();
calc.runCalculations(data);
while(calc.isCalculating()){
//do nothing
}
System.out.println("results: "+calc.getAnswer());
calc.runCalculations(data2);
//in calculator:
public runCalculations(Data data){
globalData=data;
this.notify();
}
public void run(){
while(true){
synchronized(this){
wait();
}
calculating=true;
globalData=calculate(globalData);
calculating=false;
}
}
讓我與大多數人一起,建議不要使用低級線程同步原語,而是使用併發包。至少看看BlockingQueue看看你是否喜歡它。 – Thilo 2010-07-19 04:28:42