Thread.Sleep()
同期メソッドのアクションのループ内で時間間隔を作りたい場合、使用は悪い解決策であると言われました。
一方、プログラムの実行中にアクティブな 2 つの異なるスレッドと 1 つの共有オブジェクトがあり、その共有オブジェクトで Object.wait(long) を使用すると、GUI がしばらくフリーズします。
この問題のより良い解決策は何ですか?
更新コードのこの部分には、GUI で開始されるスレッドの 1 つが含まれています。
class temperatureUp extends Thread
{
@Override
public void run()
{
while(true)
{
try
{
GBC.increaseTemp();
updateSystemStatus();
}
catch(Exception ex)
{
StringWriter w = new StringWriter();
ex.printStackTrace(new PrintWriter(w));
txtLog.setText(w + "\n" + txtLog.getText());
}
}
}
};
これは、共有オブジェクト GBC の同期メソッドです。
public synchronized void increaseTemp() throws InterruptedException{
// don't increase the temperature if the boiler
// is not turned on...
while (!isBoilerOn)
wait();
// increase the current temperature
if ((currentTemp + 1) < MAX_TEMP && currentTemp < desiredTemp) {
Thread.sleep(2000); ///what should put here if not thread sleep?
currentTemp ++;
updateGasBoilerStatus();
}
}