Java多线程编程核心技术(第3版)
上QQ阅读APP看书,第一时间看更新

1.13 方法yield()

yield()方法的作用是放弃当前的CPU资源,让其他任务去占用CPU执行时间,放弃的时间不确定,有可能刚刚放弃,马上又获得CPU时间片。本示例将以取得运行的时间为结果,来测试yield()方法的使用效果。

创建t17项目,MyThread.java文件代码如下:


package extthread;

public class MyThread extends Thread {

@Override
public void run() {
    long beginTime = System.currentTimeMillis();
    int count = 0;
    for (int i = 0; i < 50000000; i++) {
        // Thread.yield();
        count = count + (i + 1);
    }
    long endTime = System.currentTimeMillis();
    System.out.println("用时:" + (endTime - beginTime) + "毫秒!");
}

}

文件Run.java代码如下:


package test;

import extthread.MyThread;

import extthread.MyThread;

public class Run {
public static void main(String[] args) {
    MyThread thread = new MyThread();
    thread.start();
}

}

程序运行结果如图1-60所示。

将代码:


// Thread.yield();

去掉注释,再次运行,时间结果如图1-61所示。

图1-60 CPU独占时间片,速度很快

图1-61 将CPU资源让给其他资源,导致速度变慢