当前位置 : 主页 > 编程语言 > java >

sleep与yield的区别

来源:互联网 收集:自由互联 发布时间:2022-07-04
暂停线程执行常用的方法有 sleep()和 yield()方法,这两个方法的区别是: sleep()方法:可以让正在运行的线程进入阻塞状态,直到休眠时间满了,进入就绪状 态 yield()方法:可以让正在运

暂停线程执行常用的方法有 sleep()和 yield()方法,这两个方法的区别是:

  • sleep()方法:可以让正在运行的线程进入阻塞状态,直到休眠时间满了,进入就绪状 态
  • yield()方法:可以让正在运行的线程直接进入就绪状态,让出 CPU 的使用权。
  • sleep 方法的使用

    package com.yqq.app12;

    import lombok.SneakyThrows;

    /**
    * @Author yqq
    * @Date 2021/11/25 23:25
    * @Version 1.0
    */
    public class SleepRhread implements Runnable{

    @Override
    public void run() {
    System.out.println(Thread.currentThread().getName()+"线程开始");
    for (int i = 0; i < 20; i++) {
    try {
    Thread.sleep(2000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    System.out.println(Thread.currentThread().getName()+" "+i);
    }
    System.out.println(Thread.currentThread().getName()+"线程结束");
    }

    public static void main(String[] args) {
    Thread t1 = new Thread(new SleepRhread());
    t1.start();
    }
    }

    yield 方法的使用
    yield()方法的作用:暂停当前正在执行的线程,并执行其他线程。 yield()让当前正在运行的线程回到可运行状态,以允许具有相同优先级的其他线程获得 运行的机会。因此,使用 yield()的目的是让具有相同优先级的线程之间能够适当的轮换执行。 但是,实际中无法保证 yield()达到让步的目的,因为,让步的线程可能被线程调度程序再次 选中。

    使用 yield 方法时要注意的几点:

  • yield 是一个静态的方法。
  • 调用 yield 后,yield 告诉当前线程把运行机会交给具有相同优先级的线程。
  • yield 不能保证,当前线程迅速从运行状态切换到就绪状态。
  • yield 只能是将当前线程从运行状态转换到就绪状态,而不能是等待或者阻塞状态。
  • package com.yqq.app12;

    /**
    * @Author yqq
    * @Date 2021/11/25 23:16
    * @Version 1.0
    */
    public class YieldThread implements Runnable{
    @Override
    public void run() {
    for (int i = 0; i < 20; i++) {
    if ("Thread-0".equals(Thread.currentThread().getName()))
    if (i==0)
    Thread.yield();
    System.out.println(Thread.currentThread().getName()+" "+i);
    }
    }

    public static void main(String[] args) {
    Thread t1 = new Thread(new YieldThread());
    Thread t2 = new Thread(new YieldThread());
    t1.start();
    t2.start();
    }
    }


    【文章原创作者:香港显卡服务器 http://www.558idc.com/hkgpu.html 网络转载请说明出处】
    上一篇:如何判断线程是否存活
    下一篇:没有了
    网友评论