《Java多线程编程核心技术(第2版)》 —1.5 sleep(long millis)方法

举报
华章计算机 发表于 2020/02/08 14:01:50 2020/02/08
【摘要】 本节书摘来自华章计算机《Java多线程编程核心技术(第2版)》 一书中第1章,第1.5节,作者是高洪岩。

1.5 sleep(long millis)方法

sleep()方法的作用是在指定的时间(毫秒)内让当前“正在执行的线程”休眠(暂停执行),这个“正在执行的线程”是指this.currentThread()返回的线程。

下面通过一个示例进行说明。创建项目t8项目,类MyThread1.java代码如下:

public class MyThread1 extends Thread {

    @Override

    public void run() {

        try {

            System.out.println("run threadName="

                    + this.currentThread().getName() + " begin");

                Thread.sleep(2000);

            System.out.println("run threadName="

                    + this.currentThread().getName() + " end");

        } catch (InterruptedException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

}

如果调用sleep()方法所在的类是Thread,则执行代码:

Thread.sleep(3000);

this.sleep(3000);

效果是一样的。

如果调用sleep()方法所在的类不是Thread,则必须使用代码:

Thread.sleep(3000);

实现暂停的功能。

运行类Run1.java代码如下:

public class Run1 {

    public static void main(String[] args) {

        MyThread1 mythread = new MyThread1();

        System.out.println("begin =" + System.currentTimeMillis());

        mythread.run();

        System.out.println("end   =" + System.currentTimeMillis());

    }

}

直接调用run()方法,程序运行结果如图1-32所示。

image.png

继续实验,创建MyThread2.java代码如下:

public class MyThread2 extends Thread {

    @Override

    public void run() {

        try {

            System.out.println("run threadName="

                   + this.currentThread().getName() + " begin ="

                   + System.currentTimeMillis());

            Thread.sleep(2000);

            System.out.println("run threadName="

                   + this.currentThread().getName() + " end   ="

                   + System.currentTimeMillis());

        } catch (InterruptedException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

}

创建Run2.java代码如下:

public class Run2 {

    public static void main(String[] args) {

        MyThread2 mythread = new MyThread2();

        System.out.println("begin =" + System.currentTimeMillis());

        mythread.start();

        System.out.println("end   =" + System.currentTimeMillis());

    }

}

使用start()方法启动线程,程序运行结果如图1-33所示。

 image.png

图1-33 程序运行结果

由于main线程与MyThread2线程是异步执行的,所以首先输出的信息为begin和end,而MyThread2线程后运行的,在最后两行间隔了2s输出run … begin和run … end相关的信息。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。