Альтернатива Thread.Sleep в Java

Мне сказали, что использование 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();
    } 
}
6
задан Konrad Reiche 28 July 2012 в 11:52
поделиться