多线程 yield() 方法

发布时间 2023-03-30 14:20:35作者: 永哥伟大

Thread 类中有一个静态的 yield 方法,当一个线程调用 yield 方法时,实际就是在暗示线程调度器当前线程请求让出自己的 CPU 使用权

/**
 * @author wsy 
 */
public class DemoTest implements Runnable {

    @Override
    public void run() {
        int count = 0;

        for (int i = 1; i <= 10000000; i++) {
            count += 1;
            //出让cpu使用权
            Thread.yield();
        }
        System.out.println(count);
    }

    public static void main(String[] args) {

        Thread t1 = new Thread(new DemoTest());
        t1.start();
        //Thread.yield();

    }
}

 yield 方法和 sleep 方法的区别

  • sleep () 方法给其他线程运行机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会;
  • yield () 方法只会给相同优先级或更高优先级的线程以运行的机会;
  • 线程执行 sleep () 方法后转入阻塞 (blocked) 状态,而执行 yield () 方法后转入就绪 (ready) 状态;
  • sleep () 方法声明会抛出 InterruptedException, 而 yield () 方法没有声明任何异常;
  • sleep () 方法比 yield () 方法具有更好的移植性 (跟操作系统 CPU 调度相关)。