Почему «while (true)» с «Thread.sleep» вызывает 100% загрузку ЦП? - PullRequest
3 голосов
/ 29 ноября 2011

обновление: Я не знаю почему, но внезапно все оказалось в порядке. Теперь загрузка ЦП программы составляет всего 10% ~ 17%.


У меня проблема с Linux в фоновом режиме.
Задача должна выполняться каждые 100 секунд.
Поэтому я делаю класс таймера и некоторый код, как показано ниже:

while(true) {   
  try {
    Thread.sleep(1000 * 100);
  } catch (InterruptedException e) {
     e.printStackTrace();
  }           
}

Но он все еще заполняет использование процессора.

Вот и все главное (). Другие программы не запущены.

public static void main(String[] args) throws WeiboException, HttpException, IOException{
  timer = new Timer(true);
  timer.schedule(new Getdatatimer(), 0, 100 * 1000);

  System.out.print("runnning \n");  
  while(true) {
    try {
      Thread.sleep(1000 * 100);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }             
  }
}

таймер работает точно каждые 100сек. Но вопрос в использовании процессора.

1 Ответ

5 голосов
/ 29 ноября 2011

Ваш код выглядит нормально, это не должно вызывать оживленное ожидание.Может быть что-то другое потребляет процессор, вы можете определить это с помощью профилировщика или проверки трассировки стека в jconsole, jvisualvm.

...