sleep、yield方法和线程优先级

sleep方法

  1. 调用 sleep 会让当前线程从 Running 进入 Timed Waiting 状态(阻塞)
  2. 其它线程可以使用 interrupt 方法打断正在睡眠的线程,这时 sleep 方法会抛出 InterruptedException;
  3. 睡眠结束后的线程未必会立刻得到执行,还得看任务调度器的心情
  4. 建议用 TimeUnit 的 sleep 代替 Thread 的 sleep 来获得更好的可读性;

我们下面会用三个例子来说明上面的几点。
例一:

import lombok.extern.slf4j.Slf4j;@Slf4j(topic = "c.Test1")
public class Test1 {public static void main(String[] args) {Thread thread = new Thread("thread"){@Overridepublic void run() {try {//调用 sleep 会让当前线程从 Running 进入 Timed Waiting 状态(阻塞)Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}};thread.start();log.debug("thread state:{}",thread.getState());try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}log.debug("thread state:{}",thread.getState());}
}

运行结果:

我们可以看到,在调用 sleep 方法后会让当前线程从 Running 进入 Timed Waiting 状态(阻塞)。

例二:

import lombok.extern.slf4j.Slf4j;@Slf4j(topic = "c.Test1")
public class Test2 {public static void main(String[] args) {Thread thread = new Thread("thread") {@Overridepublic void run() {log.debug("进入睡眠");try {Thread.sleep(2000);} catch (InterruptedException e) {log.debug("thread线程醒过来了");e.printStackTrace();}}};thread.start();try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}log.debug("唤醒thread线程");//其它线程可以使用 interrupt 方法打断正在睡眠的线程,这时 sleep 方法会抛出 InterruptedExceptionthread.interrupt();}
}

运行结果:

我们在例二的代码中调用了interrupt方法来打断了此时正在睡眠的线程thread,因为被打断睡眠了,所以此时sleep抛出InterruptedException异常。

例三:

import lombok.extern.slf4j.Slf4j;import java.util.concurrent.TimeUnit;@Slf4j(topic = "c.Test3")
public class Test3 {public static void main(String[] args) throws InterruptedException {log.debug("开始睡眠");//其实TimeUnit内部也是调用原生的sleep方法,//只不过TimeUnit给它进行了一下单位的换算,增加了可读性(不用数那么多个0了...)TimeUnit.SECONDS.sleep(1);log.debug("结束睡眠");}
}

运行结果:

其实TimeUnit最大的优点就是增加了可读性,再也不用数0了

Java多线程复习:5(sleep、yield方法和线程优先级)相关推荐

  1. Java多线程复习:1(进程和线程、并发和并行)

    进程和线程 进程 我们电脑中每一个运行着的程序都是一个进程,程序一旦运行就是进程. 进程可以视为程序的一个实例,大部分程序可以同时运行多个实例进程(如:浏览器.记事本.画图等),也有的程序只能启动一个 ...

  2. java多线程同步的四种方法_java中实现多线程的两种方法

    java多线程有几种实现方法,都是什么?同步有几种实java中多线程的实现方法有两种:1.直接继承thread类:2.实现runnable接口:同步的实现方法有五种:1.同步方法:2.同步代码块:3. ...

  3. Java 多线程启动为什么调用 start() 方法而不是 run() 方法?

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:终于放弃了单调的swagger-ui了,选择了这款神器-knife4j个人原创100W+访问量博客:点击前往,查 ...

  4. java多线程有几种实现方法_Java多线程之间实现通讯

    一.课程目标 多线程之间如何通讯 wait.notify.notifyAll()方法 lock 停止线程 守护线程 Join方法 优先级 Yield 二.多线程之间如何实现通讯 2.1 什么是多线程之 ...

  5. Java多线程复习_Java多线程复习

    一.线程的基本概念 简单的说:线程就是一个程序里不同的执行路径 在同一个时间点上cpu只会有一个线程在执行 Java里的多线程是通过java.lang.Thread类来实现的 每个线程都拥有自己独立的 ...

  6. Java多线程【三种实现方法】

    java多线程 并发与并行 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行 并行:一组程 ...

  7. Java多线程复习整理(二)

    目录 1. 线程的五种状态(操作系统层面)? 2.线程的状态(JAVA层面)? 3.. 线程相关的基本方法? 4. wait()和sleep()的区别? 5.sleep()方法和yield()方法区别 ...

  8. java多线程复习与巩固(三)

    Java中线程的状态分为6种. 新建(NEW):新创建的一个线程对象. 可运行(RUNNABLE):也叫就绪状态.线程对象创建后,其他线程(比如main线程)调用该线程的start 方法.该状态的线程 ...

  9. java多线程同步的五种方法

    一.前几天去面试,被大师问道一些很基础的问题,感觉自己答的很不满意,闲话不多说,进入正题. 二.为什么要使用同步? 因为当我们有多个线程要同时访问同一个变量或对象时,如果这些线程中午既有读又有写操作时 ...

最新文章

  1. 使用批处理复制并以时间规则重命名文件
  2. SQLServer “无法对数据库‘XXX‘ 执行删除,因为它正用于复制”的解决方法
  3. 手机安装python的步骤_小白入门:Python安装的10个步骤,极其细致!!
  4. teleport 组件的作用_人脸识别综述! 覆盖人脸检测,预处理和特征表示三大核心组件!...
  5. 微软:来这个开源的网站看看我们是如何拥抱开源的
  6. 用c#算成绩的总和_用c#输入几门课程成绩求总成绩和平均成绩,定义方法实现如果输入的成绩不是整数,则重新输入(方法)...
  7. SilverLight自定义集合控件中的集合项数据绑定问题
  8. Bat 一键清理Chrome谷歌浏览器所有缓存 个人档案
  9. 软件测试kpi指标,测试管理之绩效考核指标
  10. PHP之——官方手册下载地址
  11. java 支付宝 H5支付
  12. 编码的奥秘:两种典型的微处理器
  13. 【题解】 bzoj1135: [POI2009]Lyz (线段树+霍尔定理)
  14. 知乎:电脑长时间不关机会缩短电脑寿命吗?
  15. 佩戴骨传导耳机对耳朵有损害?不仅无损相比传统耳机优点有很多
  16. G1垃圾回收器REGION SIZE说明
  17. element-ui的输入框只能输入数字
  18. C语言中struct typedef 以及结构体指针用法
  19. android语言设置,android9.0默认系统语言改为中文
  20. 工作技术点小结_webank

热门文章

  1. 在阿里云ECS服务器上面开启tomcat服务并且正常后,无法访问怎么办?原来是没有开通外网访问的端口
  2. Ubuntu 14.04 64bit上升级Intel官方集显更新驱动程序
  3. blender动画全面学习教程
  4. grep 在HP-UX下的递归查找
  5. Prometheus+Granfana
  6. Firefox 的User Agent 将移除 CPU 架构信息
  7. 怎样查看一个端口有无开启
  8. Mac OS Terminal Commands
  9. 使用DCloud+Framework7制作移动APP应用(一)
  10. 内存管理器(二)边界标识法