线程中的sleep方法
发布日期:2024-04-25 21:46:14 浏览次数:1 分类:博客文章

本文共 3200 字,大约阅读时间需要 10 分钟。

线程中的sleep方法

目录

一、关于线程的sleep方法

static void sleep(long millis)

1.静态方法:Thread.sleep(1000)
2.单位是毫秒
3.作用:让当前线程进入休眠,进入“阻塞状态”,放弃占用cpu时间片,让给其他线程使用
出现在那个线程,哪个线程就休眠
4.Thread.sleep()可以实现,隔一段时间去执行一段特定的代码。每隔多久就执行一次

废话不多说,直接上代码:

首先先写个代码来简单看一下,线程的休眠

例如,我们想要实现一个简单的输出操作,但是让它在10秒之后再执行

public class ThreaTest06 {    public static void main(String[] args) {        try {            Thread.sleep(10000);        } catch (InterruptedException e) {            e.printStackTrace();        }        System.out.println(Thread.currentThread().getName()+"---->简单的打印");    }}

输出:至于休眠效果可以自己试验一下,在这就不演示了!

main---->简单的打印

写个例子,让他可以一秒打印一个数字

public class ThreaTest06 {    public static void main(String[] args) {        for (int i = 0; i < 10; i++) {            System.out.println(Thread.currentThread().getName()+"------>"+i);            //当程序在循环中每执行一次输出,让它休眠一秒            try {                Thread.sleep(1000);            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }}

输出:可以自己看一下是不是一秒打印一个数字

main------>0main------>1main------>2main------>3main------>4main------>5main------>6main------>7main------>8main------>9

二、sleep让当前线程进入休眠

sleep并不是哪个线程调用就休眠哪个线程,要看sleep所在的位置

public class ThreadTest07 {    public static void main(String[] args) {        Thread t=new Thread07();        t.setName("t");        t.start();        //调用sleeo方法        try {            //t线程在此不会进入睡眠,因为sleep是一个静态的方法,            //刚才提到,sleep出现在哪里,就作用在哪里,现在是在主线程当中,主线程就休眠            t.sleep(5000);        } catch (InterruptedException e) {            e.printStackTrace();        }        System.out.println("5秒之后执行");    }    static class Thread07 extends Thread{        @Override        public void run() {            for (int i = 0; i < 100; i++) {                System.out.println(Thread.currentThread().getName()+"------>"+i);            }        }    }}

输出:在控制台中可以看到,t线程执行完之后,主线程休眠5秒,然会接着再执行输出操作!

t------>0t------>1t------>2t------>3t------>45秒之后执行

三、终止线程的休眠interrupt()

思考:如果一下线程休眠时间太长了,那么在中途怎么去唤醒这个线程

public class ThreadTest08 {    public static void main(String[] args) {        Thread t=new Thread(new Thread08());        t.setName("t");        t.start();        //我们希望在5秒之后,醒来中断线程的睡眠,interrupt()方法        try {            t.sleep(1000*5);        } catch (InterruptedException e) {            //打印异常信息            e.printStackTrace();        }        t.interrupt();//干扰    }}    class Thread08 implements Runnable{        // run()方法当中的一场不能throws,只能try        //子类重写父类的方法时,子类不能比父类抛出更多的异常        @Override        public void run() {            System.out.println(Thread.currentThread().getName()+"---->  begin");            try {                //睡一年                Thread.sleep(1000*60*60*24*365);            } catch (InterruptedException e) {                e.printStackTrace();            }            System.out.println(Thread.currentThread().getName()+"---->  end");        }    }

输出:

t---->  beginjava.lang.InterruptedException: sleep interrupted	at java.lang.Thread.sleep(Native Method)	at com.thread.Thread08.run(ThreadTest08.java:32)	at java.lang.Thread.run(Thread.java:748)t---->  end

当然我们在输出时也可不打印异常信息

把e.printStackTrace();注释一下,因为抛出异常是t线程中的,所以是注释下面的这个打印信息

看下输出结果:在睡眠之后打印end

t---->  begint---->  end

转载地址:https://www.cnblogs.com/lingstar/p/16534292.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:线程中的无名管道
下一篇:线程中方法睡眠对执行线程的影响

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月10日 09时44分24秒