必威体育Betway必威体育官网
当前位置:首页 > IT技术

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

时间:2019-10-14 05:15:40来源:IT技术作者:seo实验室小编阅读:80次「手机版」
 

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工程师笔试题

                           高新兴--java工程师笔试题 试卷中涵盖前端技术、java基础知识、开源框架和数据库技

java官网

2019独角兽企业

《java虚拟机原理图解》

转载自:http://blog.csdn.net/luanlouis/ 注:一下内容均针对jdk1.7之前的版本,新版中中可能有一些变动 JVM运行时数据区(JVM Runtime

javascript 中innerHTML的用法

javascript 中innerHTML的用法 语法 Object.innerHTML = “HTML”;//设置其内容 var html = Object.innerHTML;//获取其内容

alternatives –config java

linux安装mvn后,openjdk会成主默认环境,需要使用上面的alternatives切换回jdk。但是在切换回之前,还需要把jdk加入到alternatives中

分享到:

栏目导航

推荐阅读

热门阅读