Java并发– yield()方法

屈服函数

该函数试图确保更重要的线程首先运行,而不是花费太多时间执行并且也不重要的线程。

当线程调用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方法。

  • 当线程在其执行期间暂停时,无法确保它早晚获得机会,这完全取决于调度算法和线程调度程序。