Java Thread之Sleep()使用方法及总结
作者:每天都要进步一点点 时间:2023-11-16 10:38:35
一、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
标签:Java,Thread,Sleep
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java使用join方法暂停当前线程
2023-11-03 04:32:31
Android中使用CircleImageView和Cardview制作圆形头像的方法
2022-04-19 05:41:35
![](https://img.aspxhome.com/file/2023/2/92582_0s.gif)
C#编程实现向并口设备发送指令、获取并口设备的状态
2023-02-02 02:56:39
详解JAVA动态代理
2023-11-24 22:52:04
利用Lambda表达式创建新线程案例
2023-08-26 23:16:00
Android用PopupWindow实现自定义Dailog
2023-11-03 13:34:57
![](https://img.aspxhome.com/file/2023/0/138320_0s.jpg)
SpringCloud HystrixDashboard服务监控详解
2021-12-16 03:35:47
![](https://img.aspxhome.com/file/2023/0/69740_0s.png)
Java八种基本变量作为类的成员变量的默认值操作
2022-06-25 04:55:58
springboot集成Swagger的方法(让你拥有属于自己的api管理器)
2023-11-08 20:39:15
![](https://img.aspxhome.com/file/2023/2/108432_0s.jpg)
浅谈一下Java中的悲观锁和乐观锁
2023-08-12 05:54:27
Java网络编程实例——简单模拟在线聊天
2023-08-20 04:39:42
![](https://img.aspxhome.com/file/2023/6/77476_0s.png)
通过Mybatis实现单表内一对多的数据展示示例代码
2021-12-20 12:34:31
![](https://img.aspxhome.com/file/2023/1/64011_0s.png)
Java的JNI快速入门教程(推荐)
2022-11-22 16:10:48
Spring实现默认标签解析流程
2021-07-29 10:07:55
教你用JAVA写文本编辑器(一)
2023-06-13 09:05:31
mybatis log4j2打印sql+日志实例代码
2022-09-30 16:50:08
![](https://img.aspxhome.com/file/2023/1/97941_0s.png)
Java使用组合模式实现表示公司组织结构功能示例
2022-07-31 08:03:37
![](https://img.aspxhome.com/file/2023/4/75404_0s.png)
解决Java中由于数据太大自动转换成科学计数法的问题
2022-01-24 17:31:45
Android跳转三方应用实例代码
2022-02-01 11:15:42
![](https://img.aspxhome.com/file/2023/7/125407_0s.jpg)
如何使用SpringSecurity保护程序安全
2022-09-08 19:57:50