11.0、Java多线程——线程礼让
线程礼让:
礼让线程,让当前正在执行的线程暂停,但不阻塞
将线程从运行状态转为就绪状态
让CPU重新调度,但是礼让一定是成功的但是CPU调度的时候不一定成功,就是说也许重新调度之后还是调度了原来的线程去跑
接下里我们用代码实现一下线程礼让,代码如下所示:
package com.hkl.state;
public class TestYield {
public static void main(String[] args) {
MyYield myYield = new MyYield();
new Thread(myYield,"a").start();
new Thread(myYield,"b").start();
}
}
class MyYield implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"线程正在执行...");
Thread.yield();
System.out.println(Thread.currentThread().getName()+"线程已经停止...");
}
}
运行结果如果是:
a线程正在执行...
a线程已经停止...
b线程正在执行...
b线程已经停止...
那就说明没有礼让成功,一个线程执行完毕另一个线程才开始执行
运行结果如果是:
a线程正在执行...
b线程正在执行...
a线程已经停止...
b线程已经停止...
就说明线程礼让成功,一个线程开始执行然后礼让另一个线程也开始执行,然后在结束线程
这次运行,截图说明礼让成功~
补充一下这里如果用 lambda表达式的话,代码如下所示:
package com.hkl.state;
public class TestYield {
public static void main(String[] args) {
Runnable runnable = ()-> {
System.out.println(Thread.currentThread().getName()+"线程正在执行...");
Thread.yield();
System.out.println(Thread.currentThread().getName()+"线程已经停止...");
};
new Thread(runnable,"a").start();
new Thread(runnable,"b").start();
}
}