这个方法用的不多,了解一下即可。
方法是静态的,直接用类名调即可。
方法名 | 说明 |
---|---|
public static void yield() | 出让线程/礼让线程 |
MyThread.java
public class MyThread extends Thread{
@Override
public void run() {//"飞机" "坦克"
for (int i = 1; i <= 100; i++) {
System.out.println(getName() + "@" + i);
}
}
}
main方法
public class ThreadDemo {
public static void main(String[] args) {
MyThread t1 = new MyThread();
MyThread t2 = new MyThread();
t1.setName("飞机");
t2.setName("坦克");
t1.start();
t2.start();
}
}
运行上面代码,我们可以发现,线程的执行是随机性的,有可能是:你一次我一次,也有可能刷一下执行很多很多的飞机,然后再刷一下执行很多很多的坦克。
我觉得这样不太好,那能不能让线程的执行尽可能均匀一些呢?
因此就可以用到 yield()
,出让线程方法。
例如:现在是 “飞机线程” 抢到了CPU的执行权,此时就会打印飞机,打印完后,如果没有 yield()
,那么CPU的执行权还在飞机线程上,因此就有可能导致飞机一直打印,直到CPU的执行权被坦克抢走。
但现在我们加了一个 yield()
,表示当飞机这个线程打印完后,此时它就会出让CPU的执行权,那么下一次在运行的时候,飞机跟坦克就会重新再去抢夺CPU的执行权,此时是有可能让这个结果尽可能均匀一点。
但是它只是尽可能的均匀一点,虽然飞机出让了CPU的执行权,但是在上面再次抢夺的时候,飞机有可能再抢到CPU,因此不是绝对的。
因此这个方法在以后用的非常少,了解一下即可。
public class MyThread extends Thread{
@Override
public void run()
for (int i = 1; i <= 100; i++) {
System.out.println(getName() + "@" + i);
//表示出让当前CPU的执行权
Thread.yield();
}
}
}
运行结果如下