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

 更新时间:2022年11月18日 11:06:41   作者:每天都要进步一点点  
这篇文章主要介绍了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】线程睡眠到期自动苏醒,并返回到可运行状态(就绪),不是运行状态。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MyBatis输入映射和输出映射实例详解

    MyBatis输入映射和输出映射实例详解

    mapper.xml是我们配置操作数据库的sql语句的地方.这篇文章主要介绍了MyBatis输入映射和输出映射实例详解,需要的朋友可以参考下
    2017-02-02
  • 利用Java获取文件名、类名、方法名和行号的方法小结

    利用Java获取文件名、类名、方法名和行号的方法小结

    这篇文章运用实例代码给大家介绍了利用Java怎样获取文件名、类名、方法名和行号,有需要的可以参考借鉴,下面一起来看看吧。
    2016-08-08
  • Java实现的爬虫抓取图片并保存操作示例

    Java实现的爬虫抓取图片并保存操作示例

    这篇文章主要介绍了Java实现的爬虫抓取图片并保存操作,涉及Java针对页面URL访问、获取、字符串匹配、文件下载等相关操作技巧,需要的朋友可以参考下
    2018-08-08
  • Java中MessageDigest来实现数据加密的方法

    Java中MessageDigest来实现数据加密的方法

    这篇文章主要介绍了Java中MessageDigest来实现数据加密的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • Spring JPA 错题集解决案例

    Spring JPA 错题集解决案例

    这篇文章主要为大家介绍了Spring JPA 错题集解决案例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • Java 如何实现一个http服务器

    Java 如何实现一个http服务器

    这篇文章主要介绍了Java 如何实现一个http服务器,帮助大家更好的理解和学习Java,感兴趣的朋友可以了解下
    2020-11-11
  • MyBatis 延迟加载、一级缓存、二级缓存(详解)

    MyBatis 延迟加载、一级缓存、二级缓存(详解)

    下面小编就为大家带来一篇MyBatis 延迟加载、一级缓存、二级缓存(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • struts2实现多文件上传的示例代码

    struts2实现多文件上传的示例代码

    本篇文章主要介绍了struts2实现多文件上传的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • SpringBoot自定义对象参数超详细介绍作用

    SpringBoot自定义对象参数超详细介绍作用

    SpringBoot通过自定义对象参数,可以实现自动类型转换与格式化,并可以级联封装,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-09-09
  • IntelliJ IDEA 2022.2.1最新永久激活破解教程(持续更新)

    IntelliJ IDEA 2022.2.1最新永久激活破解教程(持续更新)

    这篇文章主要介绍了IntelliJ IDEA 2022.2.1最新永久激活破解教程(持续更新),小编测试这种激活工具也适用idea2022以下所有版本,本篇教程整理的比较详细,汇总了idea各个版本的激活工具,激活方法多种多样,大家选择一种即可,感兴趣的朋友跟随小编一起看看吧
    2022-09-09

最新评论