线程让步。Thread.yield()方法作用是:暂停当前正在执行的线程对象,并执行其他线程。
但是,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。
我们看看使用示例:
class MyThread8One extends Thread {
private int countOne = 10;
@Override
public void run() {
while (countOne-- > 0) {
PrintUtils.print("MyThread8One =================== count: " + countOne);
Thread.yield();
}
}
}
class MyThread8Two extends Thread {
private int countTwo = 10;
@Override
public void run() {
while (countTwo-- > 0) {
PrintUtils.print("MyThread8Two count: " + countTwo);
}
}
}
public class ThreadTest8 {
public static void main(String[] args) {
MyThread8One myThread8One = new MyThread8One();
MyThread8Two myThread8Two = new MyThread8Two();
myThread8One.start();
myThread8Two.start();
}
/**
*
* MyThread8Two count: 9
* MyThread8One =================== count: 9
* MyThread8Two count: 8
* MyThread8One =================== count: 8
* MyThread8Two count: 7
* MyThread8One =================== count: 7
* MyThread8One =================== count: 6
* MyThread8Two count: 6
* MyThread8One =================== count: 5
* MyThread8One =================== count: 4
* MyThread8One =================== count: 3
* MyThread8Two count: 5
* MyThread8One =================== count: 2
* MyThread8Two count: 4
* MyThread8One =================== count: 1
* MyThread8Two count: 3
* MyThread8One =================== count: 0
* MyThread8Two count: 2
* MyThread8Two count: 1
* MyThread8Two count: 0
*
* Process finished with exit code 0
*/
}
由结果可以看出来,虽然执行了Thread. yield()方法,但是Thread8One并没有让出执行权,让Thread8Two先执行。也就是我们前面说的,yield()方法并一定能是线程让步成功。因为让步的线程还有可能被线程调度程序再次选中而继续执行。
网友评论