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方法。
当线程在其执行过程中暂停时,无法确保它很快或稍后会获得机会,这完全取决于调度算法和线程调度器。
广告