sleep与yield的区别

sleep与yield都属于暂停线程。都是静态方法,直接写在线程体中。

sleep()可以理解为“抱着资源睡觉”,由原来的运行状态进入阻塞状态,当时间到达,再由阻塞状态回到就绪状态,等待CPU的调度。

yield()直接由运行状态跳回就绪状态,表示退让线程,让出CPU,让CPU调度器重新调度。礼让可能成功,也可能不成功,也就是说,回到调度器和其他线程进行公平竞争。

使用Sleep的例子

实现sleep模拟倒计时,每一秒减一

方法一

package cn.hanquan.test;
/** sleep模拟倒计时,每一秒减一*/
public class Lambda {public static void main(String[] args) {// Labmda表达式new Thread(() -> {for (int i = 0; i < 100; i++) {System.out.println(i);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}).start();}
}

方法二

package cn.hanquan.test;
/** sleep模拟倒计时,每一秒减一*/
public class Lambda {public static void main(String[] args) throws InterruptedException {int num = 100;while (true) {Thread.sleep(1000);System.out.println(num--);}}
}

方法三

使用Date类

package cn.hanquan.test;import java.text.SimpleDateFormat;
import java.util.Date;
/** sleep模拟倒计时,每一秒减一*/
public class CountDown {public static void main(String[] args) throws InterruptedException {Date endTime = new Date(System.currentTimeMillis());// 获取当前时间while (true) {System.out.println(new SimpleDateFormat("hh:mm:ss").format(endTime));// 定义输出格式endTime = new Date(endTime.getTime() - 1000);Thread.sleep(1000);}}
}

使用yield的例子

package cn.hanquan.test;import java.text.SimpleDateFormat;
import java.util.Date;/** yield礼让线程,直接进入就绪状态,不是阻塞状态*/public class TestYield {public static void main(String[] args) throws InterruptedException {MyYield my=new MyYield();new Thread(my,"a").start();new Thread(my,"b").start();}
}class MyYield implements Runnable {@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + "-->start");Thread.yield();System.out.println(Thread.currentThread().getName() + "-->end");}
}

礼让成功的情况

礼让失败的的情况

【Java多线程】sleep与yield的辨析相关推荐

  1. 了解多线程中的yield

    2019独角兽企业重金招聘Python工程师标准>>> 最近在学习多线程这一块,发现里面有好多让人产生误区的地方,今天我来分析下java多线程中的yield功能,希望其他朋友也可以从 ...

  2. java多线程yield_java多线程笔记之让步yield例子

    java多线程以前介绍过很多这类文章了,下面我看了月小升博客写的一篇关于多线程让步yield例子了,下面一聚教程小编就来给各位转过来,希望例子对各位会带一帮助. 先看个yield让步的例子  代码如下 ...

  3. Java多线程常见面试题及答案汇总1000道(春招+秋招+社招)

    Java多线程面试题以及答案整理[最新版]Java多线程高级面试题大全(2021版),发现网上很多Java多线程面试题都没有答案,所以花了很长时间搜集,本套Java多线程面试题大全,汇总了大量经典的J ...

  4. JAVA多线程和并发基础面试问答

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一.在 ...

  5. Java多线课程,java多线程课程.doc

    java多线程课程.doc 还剩 9页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 如下:线程 A:休眠 10s线程 B:休眠 20s线程 C: 休眠 ...

  6. Java总结篇系列:Java多线程(三)

    2019独角兽企业重金招聘Python工程师标准>>> 本文主要接着前面多线程的两篇文章总结Java多线程中的线程安全问题. 一.一个典型的Java线程安全例子 public cla ...

  7. Java多线程并发技术

    Java多线程并发技术 参考文献: http://blog.csdn.net/aboy123/article/details/38307539 http://blog.csdn.net/ghsau/a ...

  8. ***JAVA多线程和并发基础面试问答

    多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一.在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题.(校对注:非常赞同这个观 ...

  9. Java总结篇系列:Java多线程(二)

    本文承接上一篇文章<Java总结篇系列:Java多线程(一)>. 四.Java多线程的阻塞状态与线程控制 上文已经提到Java阻塞的几种具体类型.下面分别看下引起Java线程阻塞的主要方法 ...

  10. Java多线程——Thread Runnable源码解析

    Java多线程的两种实现方法大家都应该知道了:继承Thread的子类实例化和实现Runnable接口用这个接口实现类去创建Thread实例. Java的线程在Linux平台上使用的是NPTL机制,JV ...

最新文章

  1. C#字符串格式化说明(String.Format) (zz.IS2120)
  2. monitor.go
  3. 比特币周一盘中数秒内闪跌 80%
  4. 密码学系列之:SAFER
  5. 二分图匹配----匈牙利算法之二
  6. Leetcode 206.反转链表(双指针迭代法和递归操作)
  7. Qt笔记-拖动文件到QWidget(获取拖动文件路径)
  8. 零基础学习前端开发,怎么自学javascript?
  9. java保留两位小数怎么_java保留两位小数4种方法
  10. 计算机组成原理_计算机组成原理amp;认识Python
  11. 操作系统安全与系统攻击
  12. SQL 同比、环比计算公式及实例演示
  13. MySQL--查询5天之内过生日的同事中的闰年2月29日问题的解决过程
  14. layer弹出层自适应高度,垂直水平居中
  15. 基于STM32F103将采集的温度-湿度值通过串口输出,用OLED屏显示自己的学号和姓名以及显示AHT20的温度和湿度,滑动显示长字符
  16. 降低管理成本、增强团队协作
  17. 广义相对论 狭义相对论 双生子
  18. 密码框后的小眼睛怎么写?
  19. Cesium变换3DTiles的位置(平移旋转缩放)
  20. Intel GPA 参数

热门文章

  1. CodeForces - 1031B Curiosity Has No Limits(思维)
  2. 怎么打_打工人|你怎么打工人了?
  3. 安卓入门系列-09一个实战小项目(备忘录Memo)
  4. Python高级语法-正则表达式
  5. linux 启动程序-p,Linux应用程序开发笔记:配置linuxptp开机启动(ubuntu gPTP)
  6. 离散对数(Baby Step Giant Step)
  7. [Windows驱动开发](二)基础知识——数据结构
  8. live555 源码分析:RTSPServer 组件结构
  9. Redis 五种数据类型
  10. selenium的简单介绍