The granularity of sleeps is generally bound by the thread scheduler’s interrupt period. In Linux, this interrupt period is generally 1ms in recent kernels. In Windows, the scheduler’s interrupt period is normally around 10 or 15 milliseconds
If I have to halt threads for periods less than this, I normally use a busy wait
EDIT: I suspect you’ll get best results on jrockit + solaris. The numbers on a windows box are terrible.
@Test
public void testWait(){
final long INTERVAL = 100;
long start = System.nanoTime();
long end=0;
do{
end = System.nanoTime();
}while(start + INTERVAL >= end);
System.out.println(end - start);
}