Извините, что этот пост больше относится к типу "и для дополнительной информации ...", чем к прямому ответу, который, я думаю, был дан сейчас - я просто подумал, что было полезно не потерять вещи в комментариях.
Похоже, что этот поток показывает много (по общему признанию) неправильного понимания того, что на самом деле делают такие методы, как Thread.sleep () и Thread.yield (). Ранее я написал материал, который может заинтересовать людей, когда я попытался прояснить некоторые из этих вопросов: Thread.sleep () (включая график поведения при различных уровнях нагрузки), Thread.yield () и ... хотя это и не упоминалось здесь, людям может быть интересен мой взгляд на приоритеты потоков .
Между прочим, , как правило, не дает никаких преимуществ в использовании System.nanoTime () в этом случае: вы просто получите время, округленное до ближайшей миллисекунды в любом случае. Я бы избавил вас от неловких вычислений и потенциальных затрат времени на получение наносекундного времени (хотя последние тоже не так уж и плохи) и просто использовал бы хороший ole 'традиционный System.currentTimeMillis (). Если ваша нить проспала, просто в следующий раз компенсируйте, поспав меньше.