在我们对线程恢复其运行时,需要使用yield做一个就绪的准备,给线程的切换提供一个缓冲。我们可以把yield看成一个通知线程的工具,在程序运行前为其准备足够的内存。下面我们就yield概念、使用注意进行介绍,然后带来实例代码的分享,一起看看怎么用yield吧。

1.概念

yield执行后线程进入就绪状态。通知调度器,主动让出对cpu的占用,让别的线程执行,但是不一定能够保证别的同样优先级的线程能够执行。线程会从运行态切换到就绪态,但是也有可能马上从就绪态又切换到运行状态。

2.使用注意

(1)yield是一个静态的本地方法(native)

(2)调用yield后,yield告诉当前线程把运行机会交给线程池中有相同优先级的线程。

(3)yield不能保证,当前线程迅速从运行状态切换到就绪状态。

(4)yield只能是将当前线程从运行状态转换到就绪状态,而不能是等待或者阻塞状态。

3.实例//yield放弃CPU时间片

public static void yieldTest(){

//定义一个线程

Thread thread = new Thread(() -> {

System.out.println(Thread.currentThread().getName() + ": 测试线程开始执行。。。");

try {

Thread.sleep(5000);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println(Thread.currentThread().getName() + ": 测试线程执行结束了。");

});

thread.start();

System.out.println(Thread.currentThread().getName() + ": 执行yield方法");

Thread.yield();

System.out.println(Thread.currentThread().getName() + ": 主线程开始执行");

}

打印结果:main: 执行yield方法

main: 主线程开始执行

Thread-0: 测试线程开始执行。。。

Thread-0: 测试线程执行结束了。

以上就是yield在java中的使用,可以说它为程序的运行状态切换提供了环境的支持。当我们想把线程切换之前,就可以使用yield方法进入就绪状态。

yield java_yield在java中的使用相关推荐

  1. 可惜Java中没有yield return

    项目中一个消息推送需求,推送的用户数几百万,用户清单很简单就是一个txt文件,是由hadoop计算出来的.格式大概如下: uid caller 123456 12345678901 789101 12 ...

  2. 关于java中线程yield()方法问题

    关于java中线程yield()方法问题 问题一: 我知道yield是用来休眠当前线程,但我查看了资料,又说其不会释放锁,所以我就不解了,其明明会将cpu资源给其他线程,那它不释放锁,其他线程有怎么获 ...

  3. JAVA中的多线程(八):线程的优先级和yield方法

    JAVA中的多线程(八):线程的优先级和yield方法 优先级代表着抢资源的频率 所有线程默认优先级是5 yield()临时释放线程的执行权 1 class Demo implements Runna ...

  4. java sleep唤醒_详解Java中的线程让步yield()与线程休眠sleep()方法

    Java中的线程让步会让线程让出优先级,而休眠则会让线程进入阻塞状态等待被唤醒,这里我们对比线程等待的wait()方法,来详解Java中的线程让步yield()与线程休眠sleep()方法 线程让步: ...

  5. java中实现具有传递性吗_Java中volatile关键字详解,jvm内存模型,原子性、可见性、有序性...

    一.Java内存模型 想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样的. Java内存模型规定了所有的变量都存储在主内存中.每条线程中还有自己的工作内存,线程的工作 ...

  6. Java中的多线程你只要看这一篇就够了

    如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个话其 ...

  7. java包装类和基本类型谁先谁后_你知道Java中基本类型和包装类的区别吗

    前情提要 上一篇中,通过一道常见的面试题(即:String.StringBuilder.StringBuffer的区别),引申到Java中基本类型和包装类的相关内容.在这一篇中,我们将解决上一篇中引申 ...

  8. 面试:说说Java中的 volatile 关键词?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | Matrix海子 来源 | https://w ...

  9. java中我爱你_Java线程学习(转)

    编写具有多线程能力的程序经常会用到的方法有: run(),start(),wait(),notify(),notifyAll(),sleep(),yield(),join() 还有一个重要的关键字:s ...

最新文章

  1. python检查目录是否存在,如果不存在则创建
  2. php imagemagick 漏洞,ImageMagick漏洞EXP简易生成脚本
  3. 使用Datastax Java驱动程序与Cassandra进行交互
  4. Python基础教程之第3章 使用字符串
  5. 数据 正则化 python_python3.6怎么单独正则化/标准化DataFrame中的指定列数据
  6. Redis工作笔记-Set类型
  7. Perl 第三章 操作符
  8. 【Elasticsearch】基于儿童积木玩具图解 Elasticsearch 聚合
  9. 听听优秀的人讲 AI!带你探知目标检测以及分割的现状和挑战
  10. 吴晓慧讲述:“随手记安全吗”网贷平台“出清”利好行业发展
  11. linux搭建dlna媒体服务器,Serviio:一款功能强大的DLNA媒体服务器软件
  12. RxJava操作符(09-算术/聚合操作连接操作)
  13. layui菜鸟教程--乐字节前端
  14. 一位Rust中年低颅压头疼患者的自救之路
  15. SQL反模式:实体-属性-值(EAV)问题(一)
  16. 关于独立DFS和域DFS板书
  17. UCI机器学习数据库使用说明
  18. php imap 库_php imap_open 实例教程
  19. 【Spring Boot】使用mockMvc模拟请求以及遇到的问题
  20. 模块化-CMJESM

热门文章

  1. 戴尔电脑无法自动修复此计算机,戴尔win10无限自动修复重置电脑时出现问题 你做对了吗?...
  2. 面临重重困难,iPhone出货量依然增长显示出强大竞争力
  3. 鸿蒙系统同心联盟UOS百科,困难重重,华为依然积极发展自主操作系统,同时布局鸿蒙和UOS...
  4. JSD-2204-面向对象-接口-潜艇游戏--Day14
  5. Python中Pip的安装操作
  6. 《God of War 3 / 战神3》图文攻略
  7. 【转贴】何人不起故园情
  8. SQL计算机名访问数据库失败-找不到网络路径
  9. HTPC知识普及讲座之六 全套设备的组建1
  10. 关键词词库制作-搜索词分析工具