线程中的sleep方法

线程中的sleep方法

线程中的sleep方法

目录线程中的sleep方法一、关于线程的sleep方法二、sleep让当前线程进入休眠三、终止线程的休眠interrupt()

一、关于线程的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------>0

main------>1

main------>2

main------>3

main------>4

main------>5

main------>6

main------>7

main------>8

main------>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------>0

t------>1

t------>2

t------>3

t------>4

5秒之后执行

三、终止线程的休眠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----> begin

java.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----> begin

t----> end

相关文章

C组形势分析:国足与第二仅差2分 赢球守住晋级希望
《恐怖奶奶:一起逃脱》汉化补丁v1.3.1
圣罗兰口红哪款好?测评官推荐这6款显白不挑皮的王炸色号
哪吒2陈塘关为什么被屠城
365安卓版

哪吒2陈塘关为什么被屠城

08-03 阅读: 6981
qq游戏进不去怎么办?
下载bst365

qq游戏进不去怎么办?

02-04 阅读: 8733
阴跷脉道家不传秘穴,关乎我们的行动和眼目