一、sleep()——线程休眠
线程休眠:指的是让线程暂缓执行一下,等到了预计时间之后再恢复执行。
线程休眠会交出CPU,让CPU去执行其他的任务。sleep() 方法不会释放锁,也就是说如果当前线程持有对某个对象的锁,则即使调用sleep() 方法,其他线程也无法访问这个对象。
使程序从:运行态——>阻塞态
class MyThread implements Runnable{
@Override
public void run() {
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(2000);//单位毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("当前线程:" + Thread.currentThread().getName() + " i = " + i);
}
}
public static void main(String[] args) {
MyThread mt = new MyThread();
new Thread(mt).start();
new Thread(mt).start();
}
}
通过代码运行之后观察会发现这两个线程是同时休眠的,但是并非我们所看的那样,所有的代码是依次进入到run()方法中的。 真正进入到方法的对象可能是多个,也可能是一个。进入代码的顺序可能有差异,但是总体的执行是并发执行。
二、yield()——线程让步
线程让步:暂停当前正在执行的线程对象,并执行其他线程。
意思就是调用yield() 让当前线程交出CPU权限,让CPU去执行其他的线程。它跟sleep方法类似,同样不会释放锁。但是yield不能控制具体的交出CPU的时间,另外,yield方法只能让拥有相同优先级的线程有获取CPU执行时间的机会。
使程序从:运行态——>就绪态
这里有个线程优先级的概念:
线程的优先级指的是,线程的优先级越高越有可能先执行(只是有可能而已&