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文档:

Java Thread之Sleep()使用方法及总结

二、使用方法

注意:在哪个线程里面调用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线程执行一次然后又休眠一秒,依次执行。

Java Thread之Sleep()使用方法及总结

三、示例

下面以一个倒计时的功能来进一步说明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;
           }
       }
   }

}

执行结果:

Java Thread之Sleep()使用方法及总结

四、注意问题

【a】sleep()方法是Thread类的静态方法,如果调用线程对象.sleep()方法并不是该线程就休眠,反正在哪一个线程里面执行了sleep()方法哪一个线程就休眠。

【b】线程睡眠到期自动苏醒,并返回到可运行状态(就绪),不是运行状态。

来源:https://weishihuai.blog.csdn.net/article/details/83994146

标签:Java,Thread,Sleep
0
投稿

猜你喜欢

  • Java使用join方法暂停当前线程

    2023-11-03 04:32:31
  • Android中使用CircleImageView和Cardview制作圆形头像的方法

    2022-04-19 05:41:35
  • 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
  • SpringCloud HystrixDashboard服务监控详解

    2021-12-16 03:35:47
  • Java八种基本变量作为类的成员变量的默认值操作

    2022-06-25 04:55:58
  • springboot集成Swagger的方法(让你拥有属于自己的api管理器)

    2023-11-08 20:39:15
  • 浅谈一下Java中的悲观锁和乐观锁

    2023-08-12 05:54:27
  • Java网络编程实例——简单模拟在线聊天

    2023-08-20 04:39:42
  • 通过Mybatis实现单表内一对多的数据展示示例代码

    2021-12-20 12:34:31
  • 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
  • Java使用组合模式实现表示公司组织结构功能示例

    2022-07-31 08:03:37
  • 解决Java中由于数据太大自动转换成科学计数法的问题

    2022-01-24 17:31:45
  • Android跳转三方应用实例代码

    2022-02-01 11:15:42
  • 如何使用SpringSecurity保护程序安全

    2022-09-08 19:57:50
  • asp之家 软件编程 m.aspxhome.com