During the second that the clockThread is asleep, the thread does not run, even if the processor becomes available. After the second has elapsed, the thread becomes Runnable again and, if the processor becomes available, the thread begins running again. 
---from SUN <Java Toturial>

解决方案 »

  1.   

    多线程还是操作系统来支持的!一般每个线程会有优先级。CPU是不断的运行高优先级的东东!你在线程中SLEEP,事实上就先把优先级降低了!CPU不会傻等!200毫秒过去了,再调用系统的中断,返回刚才SLEEP的断点,并做恢复环境之类的操作!比如你机器很慢很慢,你SLEEP之后,系统处理一个源码指令,但200毫秒过去了但由于CPU全忙,你还会等待,因为当前进程优先级最高!但现在的CPU都是多流水的!速度又快,才是多线程、多进程成为可能!
    Thread.sleep其实是调用系统SLEEP指令!有空可以找操作系统的书看看!
      

  2.   

    调用sleep()就是优先级降低了???
    好象不对吧.
    应该是线程调度程序把该线程放入blocking queue.
      

  3.   

    对,不是调整优先级,而是放入阻塞队列。
    运行中的进程或线程都有4个状态:执行,阻塞,就绪。
    当一个正在运行的进程或线程调用sleep()方法时,操作系统将这个进程或线程暂时挂起,放入blocking queue中,然后执行就绪队列中的进程或线程,当
    被挂起的进程或线程重新唤醒时,操作系统将它放入就绪队列中等待执行,而将当前执行的进程或线程挂起,放进blocking queue中。
    大概上就是这么一个过程。