一.sleep()
- Thread.sleep()是Thread类的一个静态方法,使当前线程休眠,进入阻塞状态(暂停执行),如果线程在睡眠状态被中断,将会抛出IterruptedException中断异常。
public static void main(String[] args) {
Runnable task=()->{
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
System.out.println("我被中断了!!!");
e.printStackTrace();
}
};
Thread thread=new Thread(task);
thread.start();//开启线程
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
}
thread.interrupt();//中断该线程
}
2. 线程睡眠到期自动苏醒,并返回到可运行状态(就绪),当获得cpu执行权时,才进入运行态。
二.yield()
- Thread.yield()是Thread类的一个静态方法,译为线程让步。就是说当一个线程使用了这个方法之后,它就会把自己CPU执行的时间让掉,让自己或者其它的线程运行,注意是让自己或者其他线程运行,并不是单纯的让给其他线程。举个例子:一帮朋友在排队上公交车,轮到Yield的时候,他突然说:我不想先上去了,咱们大家来竞赛上公交车。然后所有人就一块冲向公交车,有可能是其他人先上车了,也有可能是Yield先上车了。
- yield()和sleep()的区别在于,线程调用yield()后,线程状态由运行态转为就绪态,当线程进入就绪态后,它可能会立即获得cpu执行权,然后再次进入运行态。而线程调用sleep()后,线程由运行态转为阻塞态,当线程进入阻塞态后,它必须等sleep的时间过后才能进入就绪态,然后再可能获得cpu执行权,进入运行态。