Java Thread之Sleep()使用方法及总结
作者:每天都要进步一点点 发布时间:2023-11-16 10:38:35
标签:Java,Thread,Sleep
一、API简介
Thread.sleep()是Thread类的一个静态方法,使当前线程休眠,进入阻塞状态(暂停执行),如果线程在睡眠状态被中断,将会抛出IterruptedException中断异常。。
主要方法如下:
【a】sleep(long millis) 线程睡眠 millis 毫秒
【b】sleep(long millis, int nanos) 线程睡眠 millis 毫秒 + nanos 纳秒
Api文档:
二、使用方法
注意:在哪个线程里面调用sleep()方法就阻塞哪个线程。
public class SleepDemo {
public static void main(String[] args) throws InterruptedException {
Process process = new Process();
Thread thread = new Thread(process);
thread.setName("线程Process");
thread.start();
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + "-->" + i);
//阻塞main线程,休眠一秒钟
Thread.sleep(1000);
}
}
}
/**
* 线程类
*/
class Process implements Runnable {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + "-->" + i);
//休眠一秒钟
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
执行结果:main线程执行一次之后休眠一秒钟,让出cpu,此时Process线程执行一次然后又休眠一秒,依次执行。
三、示例
下面以一个倒计时的功能来进一步说明sleep()方法的使用:
/**
* @Description: 线程休眠Sleep()方法
* @Author: weishihuai
* @Date: 2018/11/11 21:31
* <p>
* 1. 注意:sleep()方法使用的位置,如果使用在main线程执行代码中,则阻塞的是main线程。如果在其他线程执行的代码中,则阻塞的是执行这些代码的线程
* 2. 案例: 倒计时功能
*/
public class TestSleepThread {
public static void main(String[] args) throws InterruptedException {
countDown(10000);
}
/**
* 倒计时方法
*
* @param mills 倒计时开始的时间距离当前时间多少毫秒
*/
public static void countDown(long mills) {
Date endDate = new Date(System.currentTimeMillis() + mills);
long endTime = endDate.getTime();
while (true) {
System.out.println(new SimpleDateFormat("hh:mm:ss").format(endDate));
//下一秒时间
endDate = new Date(endDate.getTime() - 1000);
//休眠一秒钟
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (endTime - endDate.getTime() > mills) {
break;
}
}
}
}
执行结果:
四、注意问题
【a】sleep()方法是Thread类的静态方法,如果调用线程对象.sleep()方法并不是该线程就休眠,反正在哪一个线程里面执行了sleep()方法哪一个线程就休眠。
【b】线程睡眠到期自动苏醒,并返回到可运行状态(就绪),不是运行状态。
来源:https://weishihuai.blog.csdn.net/article/details/83994146
0
投稿
猜你喜欢
- springboot启动失败的问题springboot版本是1.3.0.M1,连接的mysql版本为8,用spring-boot-start
- 安装hbase首先下载hbase的最新稳定版本 http://www.apache.org/dyn/closer.cgi/hbas
- Java 2D API通过扩展抽象窗口工具箱(AWT),为Java程序提供了二维图像,文本和图形的功能。这个复杂的渲染包支持线形图像,文本和
- 阅读收获理解SpringBoot自动配置原理一、SpringBoot是什么SpringBoot 的诞生就是为了简化 Spring 中繁琐的
- 摘要:vs2019新鲜出炉,配置opencv又有哪些不一样呢,这个教程将会一步一步的教你如何配置opencv和跑动opencv一个简单的项目
- 一、注解(annotations)列表@SpringBootApplication:包含了@ComponentScan、@Configura
- 一.关于使用Mybatisplus自带的selectById和insert方法时的一些问题1.selectById的问题(1).表的主键列名
- 需求是需要在TextView前端加入一个标签展示。最终效果图如下:根据效果图,很容易就能想到使用SpannableStringBuilder
- 1.返回ModelAndView对象(.jsp)controller代码:package controller;import java.ut
- 年纪大了,以前做过的东西过阵子还是会忘,今天使用jenkins持续集成工具时用到了eclipse上传新maven工程至svn,上传完毕后改了
- CompletableFuture 介绍CompletableFuture是1.8引入的新特性,一些比较复杂的异步计算场景,尤其是需要串联多
- 1.微信配置信息 global.properties2.方法wxpay用于生成预支付订单信息方法notifyWeiXinPay用于微信支付成
- 好久就想着好好搭建一个ssm框架,自己以后用也方便吧,但是最近的事真的是很多,很多事情都没有去干,有时候自己会怀疑一下人生自己该不该去做程序
- SpringMvc中普通类注入Service为null场景:使用Quartz定时器时,普通的java类需要注入spring的service类
- 一、需求场景有时候我们需要在项目中使用一些静态资源文件,比如城市信息文件 countries.xml,在项目启动后读取其中的数据并初始化写进
- 因为涉及到 io 流输入问题,如果不关闭会一直占用资源。所以使用过后要及时关闭,防止资源一直被占用。Scanner在使用前要导入 java.
- 我们还是用一个小例子来看看自定义View和自定义属性的使用,带大家来自己定义一个带进度的圆形进度条,我们还是先看一下效果吧从上面可以看出,我
- 实践过程效果代码public partial class Form1 : Form{ public Form1()
- pom.xml配置<dependency> <groupId>org.springframework.
- 先看下效果:两种需求场景:1.广告页3s后跳转到首页2.短信验证码60s倒计时第一种的话,根据需求我们可以知道,我们想要的效果就是3s结束做