Contents

20.4. 线程让步

线程类Thread还提供一个静态方法yield(),调用yield()方法能够使当前线程给其他线程让步。它类似于 sleep()方法,能够使运行状态的线程放弃CPU使用权,暂停片刻,然后重新回到就绪状态。

与sleep()方法不同的是,sleep()方法是线程进行休眠,能够给其他线程运行的机会,无论线程优先级高低都有机 会运行。

而yield()方法只给相同优先级或更高优先级线程机会。

package com.a51work.cn;

/**
 * 使用Runnable接口创建多线程
 */

public class Runner_Rangbu implements Runnable {

//    方法覆盖
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            //打印次数和线程的名字
            System.out.printf("第%d次执行 - %s\n", i, Thread.currentThread().getName());

            //调用yield()方法能够使当前线程给其他线程让步
            Thread.yield();
        }
        try {
            //随机生成休眠时间
            long sleepTime = (long) (10000 * Math.random());
            Thread.sleep(sleepTime);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //线程执行结束
        System.out.println("执行完成!" + Thread.currentThread().getName());
    }

    public static void main(String[] args) {
        // 创建线程t1,参数是一个线程执行对象Runner
        Thread t1 = new Thread(new Runner_Rangbu());
        //开始线程t1
        t1.start();


        // 创建线程t2,参数是一个线程执行对象Runner
        Thread t2 = new Thread(new Runner_Rangbu(),"hujianli-Thread");
        //开始线程t1
        t2.start();
    }
}

/*
yield()方法只能给相同优先级或更高优先级的线程让步,yield()方法在实际开发中很少使用,大多都使用sleep()方法,sleep()方法可以控制时间,而yield()方法不能。
* */