一、sleep()是让当前真正执行的线程暂停一段时间,并进入阻塞状态
当当前线程调用sleep()方法进入阻塞状态后,在其睡眠状态内,线程不会获得执行的机会,即使系统没有其他可执行路径,处于sleep()中的线程也不会执行
二、yield()方法是Thread类提供的一种静态方法,它可以让当前正在运行的线程暂停,但它不会阻塞该线程,他只是让该线程进入了就绪状态
三、wait() 是object类定义的方法,表示线程等待,一直执行了notify()或notifyAll()后才结束等待
四、sleep()和wait()方法的区别
两种方法都可以让程序进入阻塞状态,从运行状态转变成阻塞状态
区别:解除阻塞的时机不一样
sleep()是自动解除阻塞,唤醒了自动解除阻塞
wait()是不知道阻塞了多长时间,必须另一个线程通过notity()唤醒它
区别2:sleep()睡眠的时候没有释放锁,wait()释放了锁
五、sleep()方法和yield()方法的区别
1.sleep()方法暂停线程后,会给其它线程执行机会,不会理会其它线程的优先级;但yield()方法只能给优先级相同,或者优先级更高的线程执行机会
2.sleep()方法暂停线程后,必须经过阻塞时间才会进入就绪状态;而yield()方法不会将线程转入到阻塞状态,它直接将线程转到就绪状态
3.sleep()方法比yield()方法有更好的移植性,通常不建议使用yield()方法控制并发线程的执行
4.sleep()方法声明抛出了InterruptedExceptions异常,所以调用sleep()方法,要么捕获该异常,要不声明抛出异常