Планирование / приостановка системных часов Java - PullRequest
2 голосов
/ 20 декабря 2010

Мне нужен способ приостановить / перевести нить в поток независимо от системных часов. Это означает, что если я хочу, чтобы поток в dT msecs ослабел, он должен это сделать также, если системное время значительно изменяется в течение этого времени. Меня не так сильно интересует точность в msecs и больше в принципе, что она будет работать.

TimerTasks не вариант, так как они работают на абсолютном времени.

Ответы [ 3 ]

1 голос
/ 20 декабря 2010
1 голос
/ 20 декабря 2010

Хитрый .... сложно понять, используются ли системные часы для какой-либо стратегии. Тем не менее, вы избегаете часов потому, что время может быть изменено во время паузы потока, но System.nanoTime () не зависит от текущего времени, так как это просто число наносекунды с начала JVM. Соответственно, если в стратегии паузы используются наночастицы, можно предположить, что периоды паузы сохранят точность за счет изменения времени системных часов. Возможно, Thread.join (0, nanos) вызывается в цикле:

public static void pause(long ms) throws InterruptedException {
   long final ZERO = 0L;
   int final MAX_NANOS = 999999;
   for(int i = 0; i < ms+1; i++) {
      Thread.currentThread().join(ZERO, MAX_NANOS);
   }
}

Я не проверял изменения системных часов, но, похоже, он работает с отклонением в 0,004%.

0 голосов
/ 20 декабря 2010

Я не уверен, правильно ли я понимаю ваш вопрос. Если вам нужен планировщик задач, Quartz довольно хорош. Если вы действительно хотите приостановить произвольный поток на x раз, это может быть немного сложнее.

...