该函数试图确保更重要的线程首先运行,而不是花费太多时间执行并且也不重要的线程。
当线程调用java.lang.Thread.yield方法时,它指示线程调度程序暂停其执行。线程调度程序选择接受还是忽略此指示。
如果线程执行“ yield”功能,则调度程序将检查是否存在具有相同或更高优先级的线程。如果是这样,则将当前线程移至可运行或就绪状态,并为该线程分配处理器资源。
收益函数的语法-
public static native void yield()
让我们看一个例子-
import java.lang.*; class Demo extends Thread{ public void run(){ for (int i=0; i<3 ; i++) System.out.println("控制 " + Thread.currentThread().getName() + " thread"); } } public class Demo_one{ public static void main(String[]args){ Demo my_obj = new Demo(); my_obj.start(); for (int i=0; i<3; i++){ Thread.yield(); System.out.println("控制 " + Thread.currentThread().getName() + " thread"); } } }
输出结果
控制 main thread 控制 main thread 控制 main thread 控制 Thread-0 thread 控制 Thread-0 thread 控制 Thread-0 thread
名为Demo的类扩展了Thread类。在这里,定义了一个“运行”函数,该函数遍历一组元素并使用“ getName”函数获取线程的名称。名为“ Demo_one”的类定义了创建新实例并使用“ start”函数开始新实例的主要功能。同样在这里,元素被迭代,并且在线程上调用yield函数。
一旦线程使用yield方法完成执行,就会有许多线程争夺处理器资源。无法指定哪个线程将首先执行。
一旦线程执行yield方法,它就会从“运行”状态进入“可运行”状态。
仅当平台支持抢先式调度时,才可以使用yield方法。
当线程在其执行期间暂停时,无法确保它早晚获得机会,这完全取决于调度算法和线程调度程序。