yield()
软件包java.lang.Thread.yield()中提供了此方法。
yield()方法表示停止当前正在执行的线程,并为其他优先级相同的等待线程提供机会。
如果没有等待线程,或者所有等待线程的优先级都较低,则同一线程将继续执行。
这种方法的优点是有机会执行其他等待线程,因此,如果我们当前的线程需要更多时间来执行并将处理器分配给其他线程。
此方法是静态的,因此我们也可以使用类名访问此方法。
这是一个本地方法,这意味着该方法的实现在其他语言(例如C,C ++)中可用,因此只要需要此方法,就可以在类中声明。
我们不能期望何时产生收益将由线程调度程序决定。
此方法的返回类型为void,因此它不返回任何内容。
语法:
static native void yield(){ }
参数:
在Thread方法中,我们不传递任何对象作为参数。
返回值:
此方法的返回类型为void,它不返回任何内容。
yield()
方法示例/* We will use Thread class methods so we are importing the package but it is not mandate because it is imported by default */ import java.lang.Thread; class MyThread extends Thread { //run()Thread类的重写方法 public void run() { for (int i = 0; i < 5; ++i) { //通过调用yield()方法意味着MyThread停止其 //执行并给主线程一个机会 Thread.yield(); System.out.println("Thread started:" + Thread.currentThread().getName()); } System.out.println("Thread ended:" + Thread.currentThread().getName()); } } class Main { public static void main(String[] args) { //在这里,我们调用start()Thread类的方法,然后 //它将调用run()MyThread的方法 MyThread mt = new MyThread(); mt.start(); for (int i = 0; i < 5; ++i) { System.out.println("Thread started:" + Thread.currentThread().getName()); } System.out.println("Thread ended:" + Thread.currentThread().getName()); } }
注意:
如果我们在/*Thread.yield()*/这一行中添加注释,则两个线程将同时执行,我们无法预期哪个线程将完成其执行。
如果我们不注释/*Thread.yield()*/这一行,那么就有可能首先执行主线程,因为MyThread总是调用yield()
方法。
输出结果
E:\Programs>javac Main.java E:\Programs>java Main Thread started:main Thread started:Thread-0 Thread started:main Thread started:main Thread started:main Thread started:main Thread started:Thread-0 Thread ended:main Thread started:Thread-0 Thread started:Thread-0 Thread started:Thread-0 Thread ended:Thread-0