栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Tread 的 yield 方法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Tread 的 yield 方法

一 点睛

yiled 方法属于一种启发式的方法,它会提醒调度器我愿意放弃当前的 CPU 自由,如果 CPU 的资源不紧张,则会忽略这种提醒。

调用 yield 方法会使当前线程从 RUNNING 状态切换到 RUNNABLE 状态,一般这个方法不太常用。

二 实战 1 代码 
package concurrent;

import java.util.stream.IntStream;

public class ThreadYield {
    public static void main(String[] args) {
        IntStream.range(0, 2).mapToObj(ThreadYield::create).forEach(Thread::start);
    }


    private static Thread create(int index) {
        return new Thread(() -> {
//            if (index == 0) {
//                Thread.yield();
//            }
            System.out.println(index);
        });
    }
}
2 测试

上面的程序运行很多次,会发现输出结果不一致,有时候是打印0,有时候是打印1。

打开注释后再运行,会发现输出结果还是不一致,有时候是打印0,有时候是打印1。

3 说明 

一般情况下,因为第一个线程如果先获得了 CPU 资源,它会比较谦虚,主动告诉 CPU 调度器释放原本属于自己的资源,但是 yield 只是一个提示( hint ),CPU 调度器并不会保证每次都能满足 yield 提示。

yield 对程序并不可控,所以这个方法一般不太常用。

三 yield 和 sleep 的对比

sleep 会导致当前线程暂停指定的时间,没有 CPU 时间片的消耗。yield 只是对 CPU 调度器的一个提示,如果 CPU 调度器没有忽略这个提示,它会导致线程上下文的切换。sleep 会使线程短暂 block,会在指定的时间内释放 CPU 资源。yield 会使 RUNNING 状态的 Thread 进入 RUNNABLE 状态(如果 CPU 调度器没有忽略这个提示的话)sleep 几乎百分之百地完成给定时间的休眠,而 yield 的提示并不能一定担保。一个线程 sleep 另一个线程调用 interrupt 会捕获到中断信号,而 yield 则不会。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/736549.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号