java线程礼让yield

1.yield方法

​ 使用Thread类的静态方法yield可以对当前线程进行礼让,yield方法使线程从运行状态转换到就绪状态,

这与sleep方法对比,sleep是使线程从运行状态进入阻塞状态。

现在给出代码便于理解:

public class testyield implements Runnable{public static void main(String[] args) {// TODO Auto-generated method stubnew Thread(new testyield(),"test1").start();new Thread(new testyield(),"test2").start();}@Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println(Thread.currentThread().getName()+"->start");Thread.yield();    //进行礼让System.out.println(Thread.currentThread().getName()+"->end");}}运行结果如下:
1.
test1->start
test1->end
test2->start
test2->end2.
test1->start
test2->start
test2->end
test1->end

​ 从结果分析,可以得出线程的礼让不是一定成功的,因为一个线程test1调用yield()方法后从运行态到就绪态后,CPU再通过系统调度调度一个线程进入CPU,这个重新调入的线程也可能是线程test1的情况。所以线程使用yield方法不一定会成功礼让,因为yield方法只是单纯把当前线程从运行态切换为就绪态。最终操作系统通过系统调度,重新调度线程,至于调度哪个线程是操作系统的事。所以才会出现上面情况一。

java线程礼让yield相关推荐

  1. java线程中yield()和join()的区别

    多线程在面试中是非常受欢饮的题目,我个人认为我们很少有机会能够真正的用到复杂的多线程(我在7年前使用过一次),熟悉这些概念能够增加你的信心,先前,我已经讨论了一个相似的问题,wait()和sleep( ...

  2. java线程(Thread)的创建与常用方法

    目录 Process与Thread 线程的创建 继承Thread 2. 实现Runnable 3. 实现Callable 通过线程下载图片的例子 实现Runnable接口 抢票的例子: 龟兔赛跑: 实 ...

  3. Java线程小刀牛试

    2019独角兽企业重金招聘Python工程师标准>>> 线程简介 什么是线程 现代操作系统调度的最小单元是线程,也叫轻量级进程(Light Weight Process),在一个进程 ...

  4. Java线程状态及 wait、sleep、join、interrupt、yield等的区别

    Java中的线程状态(详见Java线程状态及转换-MarchOn): wait:Object类的实例方法,释放CPU执行权,进入等待状态,直到  被中断.被拥有该对象锁的线程唤醒(notify或not ...

  5. java线程 yield_Java线程中yield与join方法的区别

    长期以来,多线程问题颇为受到面试官的青睐.虽然我个人认为我们当中很少有人能真正获得机会开发复杂的多线程应用(在过去的七年中,我得到了一个机会),但是理解多线程对增加你的信心很有用.之前,我讨论了一个w ...

  6. (转) Java线程同步阻塞, sleep(), suspend(), resume(), yield(), wait(), notify()

    为了解决对共享存储区的访问冲突,Java 引入了同步机制.但显然不够,因为在任意时刻所要求的资源不一定已经准备好了被访问,反过来,同一时刻准备好了的资源也可能不止一个. 为解决访问控制问题,Java ...

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

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

  8. Java的线程让步yield

    一 点睛 yield()方法是一个和sleep()方法有点类似的方法,它是Thread类提供的一个静态方法,它也可以让当前正在执行的线程暂停,但它不会阻塞该线程,它只是让线程转入就绪状态.yield只 ...

  9. Java 线程 知识

    学习线程 先了解 线程与进程之间的关系 线程:  (线程是cpu调度的最小单位) 我们可以说是进程中执行运算的最小单位. 进程: (进程是资源分配的最小单位) 我们可以说是一段程序执行的过程, 如果还 ...

最新文章

  1. Go 分布式学习利器(11)-- Go语言通过单链表 实现队列
  2. 基于用户投票的排名算法(四):牛顿冷却定律
  3. 【转】ABAP的坑4
  4. (转) SpringBoot接入两套kafka集群
  5. HTTPS 协议到底比 HTTP 协议多些什么?
  6. Bzoj 1566: [NOI2009]管道取珠(动态规划-神题)
  7. 质性研究工具_MAXQDA在质性数据分析中的使用——免费的中文在线研讨会!
  8. puppet连载15:搭建zabbix服务端、客户端
  9. python几种数据结构_Python中的4种数据结构
  10. 【量子信息与量子计算简明教程|陈汉武】阅读笔记1——第一章 量子信息与量子计算的基础概念
  11. sql join与笛卡尔积
  12. MySQL快速解决“is marked as crashed and should be repaired“故障
  13. 你需要来自TrustedInstaller的权限才能对此文件夹进行更改(已解决)
  14. 定时器的ETR有何功能?
  15. SPI Flash/Nor Flash/Nand Flash
  16. 怎么用计算机自己做动画片,大师为你详解动画怎么制作
  17. 51单片机——红外遥控 C语言入门编程
  18. Java 通过Office365 服务器发送邮件
  19. SQLDER--工具参数--中英文对照
  20. 周鸿祎谈: 创新与微创新

热门文章

  1. Jfinal碰到的问题记录
  2. Web Service概念梳理
  3. 操作 Wave 文件(14): waveOutSetPlaybackRate、waveOutSetPitch
  4. HttpWatch工具简介及使用技巧(转载)
  5. android使用Activity
  6. 2007年50种方式将改变你生活
  7. 服务器应用程序不可用您试图在此 Web 服务器上访问的 Web 应用程序当前不可用。请点击 Web 浏览器中的“刷...
  8. 深入学习__doPostBack函数
  9. ping与telnet的区别
  10. git命令之git tag 给当前分支打标签