Java tutorial
//package com.java2s; import java.util.concurrent.TimeUnit; public class Main { private static final long SLEEP_PRECISION = TimeUnit.MILLISECONDS.toNanos(2); private static final long SPIN_YIELD_PRECISION = TimeUnit.NANOSECONDS.toNanos(10000); public static void sleepNanos(long nanoDuration) throws InterruptedException { final long end = System.nanoTime() + nanoDuration; long timeLeft = nanoDuration; do { if (timeLeft > SLEEP_PRECISION) { Thread.sleep(1); } else if (timeLeft > SPIN_YIELD_PRECISION) { Thread.sleep(0); } timeLeft = end - System.nanoTime(); if (Thread.interrupted()) throw new InterruptedException(); } while (timeLeft > 0); } public static void sleep(long millis) { if (millis > 0) { try { Thread.sleep(millis); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } } public static void sleep(int milliseconds, int nanoseconds) { try { Thread.sleep(milliseconds, nanoseconds); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } }