Мне сказали, что использование Thread.Sleep()
— плохое решение, когда иногда хочется сделать некоторый временной интервал в цикле действий в синхронизированном методе.
С другой стороны, у меня есть два разных потока, которые активны на протяжении всего времени выполнения моей программы, а также один общий объект, и когда я использую Object.wait (long )в этом общем объекте, это приводит к зависанию моего графического интерфейса. на некоторое время.
что было бы лучшим решением этой проблемы?
Обновлять Эта часть кода включает один из потоков, который запускается в графическом интерфейсе :
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();
}
}