Java并发——yield()方法


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”的类定义了main函数,其中创建了一个新实例,并使用“start”函数启动它。这里也迭代元素,并在线程上调用yield函数。

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

  • 一旦线程执行yield方法,它就会从运行状态变为可运行状态。

  • 只有在平台支持抢占式调度的情况下才能使用yield方法。

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

更新于:2020年7月4日

566 次浏览

启动你的职业生涯

通过完成课程获得认证

开始学习
广告