线程中的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秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Oracle通过pivot和unpivot配合实现行列转换
2019-04-30
给Oracle数据库换一个1522端口的监听
2019-04-30
Excel表格数据生成ECharts图表
2019-04-30
阿里云短信服务python版,pyinstaller打包运行时缺少文件
2019-04-30
Oracle的pfile和spfile的一点理解和笔记
2019-04-30
WebService的简单案例记录(Java)
2019-04-30
Html利用PHP与MySQL交互
2019-04-30
dos简单命令
2019-04-30
mysql的安装与卸载与Navicat远程连接
2019-04-30
java实现稀疏数组及将稀疏数组存入硬盘中
2019-04-30
2021-05-18
2019-04-30
Flutter 使用插件打开相册、相机
2019-04-30
libuv实现tcp代理服务器
2019-04-30
libuv使用不当导致的内存泄漏
2019-04-30
libuv实现ping包发送和接收
2019-04-30
基础架构系列篇-CENTOS7安装NGINX
2019-04-30
基础架构系列篇-系统centos7安装docker+COMPOSE
2019-04-30
基础架构系列篇-系统centos7中docker安装rabbitmq
2019-04-30
基础架构系列篇-NGINX部署VUE
2019-04-30