我正在尝试编写一个包含 2 个类、一个控制器和一个进行大量计算的类的程序。控制器创建另一个类的几个实例,然后告诉它们全部开始计算(并行)。当它们完成时它们各自返回,控制器恢复,然后,一段时间后,控制器将新数据传递给它们,并让它们再次运行计算。
理想情况下,我可以使用参数调用 start(),但这是不可能的,因此控制器调用计算器中的一个方法,将数据存储在全局中,然后启动计算线程并返回,直到我尝试再次启动线程,它告诉我线程已死。所以我试图让运行成为一个无限循环,等待它收到通知,运行计算,将结果存储在全局中,以便控制器稍后可以检索它们,然后继续等待。所以像:
//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;
}
}