Java多线程复习:5(sleep、yield方法和线程优先级)
sleep、yield方法和线程优先级
sleep方法
- 调用 sleep 会让当前线程从 Running 进入 Timed Waiting 状态(阻塞);
- 其它线程可以使用 interrupt 方法打断正在睡眠的线程,这时 sleep 方法会抛出 InterruptedException;
- 睡眠结束后的线程未必会立刻得到执行,还得看任务调度器的心情;
- 建议用 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方法和线程优先级)相关推荐
- Java多线程复习:1(进程和线程、并发和并行)
进程和线程 进程 我们电脑中每一个运行着的程序都是一个进程,程序一旦运行就是进程. 进程可以视为程序的一个实例,大部分程序可以同时运行多个实例进程(如:浏览器.记事本.画图等),也有的程序只能启动一个 ...
- java多线程同步的四种方法_java中实现多线程的两种方法
java多线程有几种实现方法,都是什么?同步有几种实java中多线程的实现方法有两种:1.直接继承thread类:2.实现runnable接口:同步的实现方法有五种:1.同步方法:2.同步代码块:3. ...
- Java 多线程启动为什么调用 start() 方法而不是 run() 方法?
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:终于放弃了单调的swagger-ui了,选择了这款神器-knife4j个人原创100W+访问量博客:点击前往,查 ...
- java多线程有几种实现方法_Java多线程之间实现通讯
一.课程目标 多线程之间如何通讯 wait.notify.notifyAll()方法 lock 停止线程 守护线程 Join方法 优先级 Yield 二.多线程之间如何实现通讯 2.1 什么是多线程之 ...
- Java多线程复习_Java多线程复习
一.线程的基本概念 简单的说:线程就是一个程序里不同的执行路径 在同一个时间点上cpu只会有一个线程在执行 Java里的多线程是通过java.lang.Thread类来实现的 每个线程都拥有自己独立的 ...
- Java多线程【三种实现方法】
java多线程 并发与并行 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行 并行:一组程 ...
- Java多线程复习整理(二)
目录 1. 线程的五种状态(操作系统层面)? 2.线程的状态(JAVA层面)? 3.. 线程相关的基本方法? 4. wait()和sleep()的区别? 5.sleep()方法和yield()方法区别 ...
- java多线程复习与巩固(三)
Java中线程的状态分为6种. 新建(NEW):新创建的一个线程对象. 可运行(RUNNABLE):也叫就绪状态.线程对象创建后,其他线程(比如main线程)调用该线程的start 方法.该状态的线程 ...
- java多线程同步的五种方法
一.前几天去面试,被大师问道一些很基础的问题,感觉自己答的很不满意,闲话不多说,进入正题. 二.为什么要使用同步? 因为当我们有多个线程要同时访问同一个变量或对象时,如果这些线程中午既有读又有写操作时 ...
最新文章
- 使用批处理复制并以时间规则重命名文件
- SQLServer “无法对数据库‘XXX‘ 执行删除,因为它正用于复制”的解决方法
- 手机安装python的步骤_小白入门:Python安装的10个步骤,极其细致!!
- teleport 组件的作用_人脸识别综述! 覆盖人脸检测,预处理和特征表示三大核心组件!...
- 微软:来这个开源的网站看看我们是如何拥抱开源的
- 用c#算成绩的总和_用c#输入几门课程成绩求总成绩和平均成绩,定义方法实现如果输入的成绩不是整数,则重新输入(方法)...
- SilverLight自定义集合控件中的集合项数据绑定问题
- Bat 一键清理Chrome谷歌浏览器所有缓存 个人档案
- 软件测试kpi指标,测试管理之绩效考核指标
- PHP之——官方手册下载地址
- java 支付宝 H5支付
- 编码的奥秘:两种典型的微处理器
- 【题解】 bzoj1135: [POI2009]Lyz (线段树+霍尔定理)
- 知乎:电脑长时间不关机会缩短电脑寿命吗?
- 佩戴骨传导耳机对耳朵有损害?不仅无损相比传统耳机优点有很多
- G1垃圾回收器REGION SIZE说明
- element-ui的输入框只能输入数字
- C语言中struct typedef 以及结构体指针用法
- android语言设置,android9.0默认系统语言改为中文
- 工作技术点小结_webank