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


猜你喜欢
- 一、问题描述上一次我们使用百度地图实现基本的定位功能,接下来我们继续实现搜索和定位,并使用LocationOverlay绘制定位位置,同时展
- 需要添加对 System.Management.dll 的引用 using System.Diagnostics; using System
- 本文实例为大家分享了Android实现图片设置圆角形式的具体代码,供大家参考,具体内容如下1.自定义的图片圆角形式CircleImageVi
- 什么是事件?用户对组件的一个操作,称之为一个事件。事件源:能够产生事件的GUI组件对象。事件处理方法:能够接受,解析和处理事件类对象,实现与
- 掌握内存操作流输入和输出都是从文件中来的,当然,也可将输出的位置设置在内存上,这就需要ByteArrayInputStream和ByteAr
- 一、Optional类的来源到目前为止,臭名昭著的空指针异常是导致Java应用程序失败的最常见原因。以前,为了解决空指针异常,Google公
- 一、swagge简介前后端分离:后端︰后端控制层,服务层,数据访问层【后端团队】前端:前端控制层,视图层【前端团队】前后端通过API进行交互
- Android 添加系统设置属性的实现及步骤Android源码开发中,常常要用到一些全局标志或者说变量,这时候我们可以给android系统添
- 目录一、System.out.println(最简单)二、java.util.logging(相对简单)三、log4j(最强大)四、comm
- 安卓提供的列表选择框(Spinner)相当于web端用户注册时的选择下拉框,比如注册候选择省份城市等。如下图便是一个列表选择框下拉列表的列表
- 使用TransitionDrawable渐变切换多张图片,供大家参考,具体内容如下1、定义变量private int change = 0;
- MyBatis注解实现动态SQL在 Mybatis 中,使用注解可以很方便的进行sql操作,但很多动态 SQL 都是由 xml 配置实现的。
- 先来看看效果图先分析饼状图的构成,非常明显,饼状图就是一个又一个的扇形构成的,每个扇形都有不同的颜色,对应的有名字,数据和百分比。经以上信息
- 代码如下一、创建EdgeLight.xaml代码如下。<ResourceDictionary xmlns="htt
- 面试官经常喜欢问Spring中的bean是不是线程安全的这个问题用来考察对Spring 中Bean作用域的理解,先说结论,Spr
- 目录@Configuration + @Bean@Componet + @ComponentScan@Import注解导入@Import直接
- Spring spring-context-indexer依赖<dependencies> <d
- 有时候我们需要在一个ArrayList的for循环中动态删除元素的需求, 废话不多说看代码List<Integer> list
- 相关文章:Java使用POI导出Excel(一):单sheetJava使用POI导出Excel(二):多个sheet相信在大部分的web项目
- 项目中需求,要做条目条目拖拽删除效果,实际效果和QQ消息删除一样,侧滑有制定和删除。效果图第一步效果图1.0自定义控件 SwipeLayou