Java 并发 – Yield() 方法

javaobject oriented programmingprogramming更新于 2025/7/6 19:56:17

Yield 函数

该函数尝试确保更重要的线程首先运行,而不是执行时间过长且不太重要的线程。

当线程调用 java.lang.Thread.yield 方法时,这是线程调度程序暂停执行的指示。线程调度程序选择接受或忽略此指示。

如果线程执行 ‘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("In control of " + 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("In control of " + Thread.currentThread().getName() + " thread");
      }
   }
}

输出

In control of main thread
In control of main thread
In control of main thread
In control of Thread-0 thread
In control of Thread-0 thread
In control of Thread-0 thread

名为 Demo 的类扩展了 Thread 类。这里定义了一个 ‘run’ 函数,该函数迭代一组元素并使用 ‘getName’ 函数获取线程的名称。名为 ‘Demo_one’ 的类定义了主函数,在该函数中创建新实例并使用 ‘start’ 函数开始该实例。这里同样迭代元素并在线程上调用 Yield 函数。

  • 一旦线程使用 Yield 方法完成执行,就会有许多线程争用处理器资源。无法指定哪个线程先执行。

  • 一旦线程执行了yield方法,它就会从Running状态转到Runnable状态。

  • 只有平台支持抢占式调度时才能使用yield方法。

  • 当线程在执行过程中暂停时,无法确保它很快或稍后会得到机会,这完全取决于调度算法和线程调度程序。


相关文章


有用资源