Thread中控制线程暂停的三种重要方法就是sleep,wait和yield。对于三种方法的特点和用法,我在这里做了总结。
sleep()
Thread.sleep()是暂停线程的常用方法,该方法必须指定暂停时长,并在暂停结束后自动醒来。当然,在sleep的过程中,也有方法直接唤醒线程,具体请问度娘。sleep函数的参数可以是(毫秒)或者(毫秒,纳秒)。
wait()
wait方法本属于object类。要使用wait方法,当前对象必须拥有即锁(monitor),因此当前对象必须在synchronized块或synchronized方法中。至于为什么wait方法不交给Thread,是因为一个线程可能包含多个object,多个object都可能被锁住,如果交给Thread处理会更加麻烦。使用wait方法的对象,需要再次使用notify或notifyAll方法唤醒。
yield()
yield方法的一种翻译是线程让步,也就是当前线程作出转让cpu资源的暗示。在执行yield方法后,cpu会从众多可执行状态中选择,也就是说当前线程可能暂停,也可能在继续执行。yield方法所做的只有作出转让cpu资源的暗示。具体参考Java Thread.yield详解。