Java Thread之Sleep()案例详解

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

到此这篇关于Java Thread之Sleep()案例详解的文章就介绍到这了,更多相关Java Thread之Sleep()内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java负载均衡服务器实现上传文件同步

    Java负载均衡服务器实现上传文件同步

    这篇文章主要介绍了Java负载均衡服务器实现上传文件同步,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Java经典面试题汇总:JVM

    Java经典面试题汇总:JVM

    本篇总结的是JVM相关的面试题,后续会持续更新,希望我的分享可以帮助到正在备战面试的实习生或者已经工作的同行,如果发现错误还望大家多多包涵,不吝赐教,谢谢
    2021-07-07
  • Java异常处理及自定义异常详细指南

    Java异常处理及自定义异常详细指南

    异常处理是Java编程中的一个重要部分,用于处理程序执行中出现的异常情况,此外还可以自定义异常来处理特定的错误情况,掌握这些异常处理技术对于编写健壮、可靠的Java程序至关重要,需要的朋友可以参考下
    2024-10-10
  • elasticsearch索引index之Translog数据功能分析

    elasticsearch索引index之Translog数据功能分析

    这篇文章主要为大家介绍了elasticsearch索引index之Translog数据功能分析,主要分析translog的结构及写入方式,有需要的朋友可以借鉴参考下
    2022-04-04
  • Java基于jdbc连接mysql数据库操作示例

    Java基于jdbc连接mysql数据库操作示例

    这篇文章主要介绍了Java基于jdbc连接mysql数据库操作,结合完整实例形式分析了java使用jdbc连接mysql数据库的具体步骤与相关注意事项,需要的朋友可以参考下
    2017-07-07
  • Java实现简单订餐系统

    Java实现简单订餐系统

    这篇文章主要为大家详细介绍了Java实现简单订餐系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • SpringCloud微服务之Config知识总结

    SpringCloud微服务之Config知识总结

    今天带大家学习SpringCloud微服务中的Config的相关知识,文中有非常详细的介绍,对正在学习SpringCloud微服务的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-05-05
  • 谨慎使用Java8的默认方法

    谨慎使用Java8的默认方法

    为什么要谨慎使用Java8的默认方法?本文给出了为什么要慎用Java8默认方法的原因,解释的很详细,感兴趣的朋友可以参考一下
    2016-01-01
  • JVM类加载之双亲委派机制解读

    JVM类加载之双亲委派机制解读

    这篇文章主要介绍了JVM类加载之双亲委派机制解读,类加载阶段分为加载、连接、初始化三个阶段,而加载阶段需要通过类的全限定名来获取定义了此类的二进制字节流,Java特意把这一步抽出来用类加载器来实现,需要的朋友可以参考下
    2023-12-12
  • 10分钟带你理解Java中的反射

    10分钟带你理解Java中的反射

    反射是java中一种强大的工具,能够使我们很方便的创建灵活的代码,这篇文章带大家十分钟快速理解Java中的反射,有需要的可以参考借鉴。
    2016-08-08

最新评论