- 线程礼让,让当前正在执行的线程暂停,但不阻塞;
- 将线程从运行状态转为就绪状态;
- 让CPU重新调度,礼让不一定成功,看CPU心情。
线程的礼让:举例来就说就是有A线程和B线程要进入“房子里面‘,而A线程里面是带了”礼让方法“的,所以当A线程进入”房子“里面之后,触发礼让先不运行,而是作为就绪状态,让B线程也进入就绪状态,再让CPU去调用。所以,A线程有了”礼让方法“也不一定
5.1 创建一个类实现Runnable接口,alt+enter快捷键创建run方法,然后在run方法里面实现简单的执行逻辑 ,并使用yield()方法,看看第一条进入线程执行的会不会礼让
class MyYield implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "线程开始执行");
Thread.yield(); // 礼让
System.out.println(Thread.currentThread().getName() + "线程停止执行");
}
}
5.2 创建一个main类,并引入刚刚外面创建好的实现Runnable接口的类,开启线程,给线程取名
(因为我在实现Runnable接口的类中使用了Thread的获取线程名称的方法
public class TestYield {
public static void main(String[] args) {
MyYield liuhaobin = new MyYield();
new Thread(liuhaobin,"刘").start(); //看看刘会不会礼让
new Thread(liuhaobin,"谢").start();
}
}
结果分析
由于我们的代码规定“刘”线程先被调取,所以我们看“刘”线程会不会礼让后面的“谢”线程就行,很明显我们看到,此次结果是“谢”线程先开始执行,说明礼让成功,但不一定每次都会被礼让
这次就没礼让成功
以下为简单的礼让测试完整代码
//测试礼让线程
//礼让不一定成功,看cpu心情
public class TestYield {
public static void main(String[] args) {
MyYield liuhaobin = new MyYield();
new Thread(liuhaobin,"刘").start(); //看看刘会不会礼让
new Thread(liuhaobin,"谢").start();
}
}
class MyYield implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "线程开始执行");
Thread.yield(); // 礼让
System.out.println(Thread.currentThread().getName() + "线程停止执行");
}
}