《Java程序员面试秘笈》—— 1.6 线程的休眠和恢复
本节书摘来异步社区《Java 7并发编程实战手册》一书中的第1章,第1.6节,作者:【西】Javier Fernández González,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.6 线程的休眠和恢复有些时候,你需要在某一个预期的时间中断线程的执行。例如,程序的一个线程每隔一分钟检查一次传感器状态,其余时间什么都不做。在这段空闲时间,线程不占用计算机的任何资源。当它继续执行的CPU时钟来临时,JVM会选中它继续执行。可以通过线程的sleep()方法来达到这个目标。sleep()方法接受整型数值作为参数,以表明线程挂起执行的毫秒数。当线程休眠的时间结束了,JVM会分给它CPU时钟,线程将继续执行它的指令。
sleep()方法的另一种使用方式是通过TimeUnit枚举类元素进行调用。这个方法也使用Thread类的sleep()方法来使当前线程休眠,但是它接收的参数单位是秒,最后会被转化成毫秒。
在本节中,我们将开发程序来完成这样的内容:使用sleep()方法,每间隔一秒就输出实际时间。
准备工作
本节的范例是在Eclipse IDE里完成的。无论你使用Eclipse还是其他的IDE(比如NetBeans),都可以打开这个IDE并且创建一个新的Java工程。
范例实现
按照接下来的步骤实现本节的范例。
1.创建一个名为FileClock的类,并且实现Runnable接口。
``
public class FileClock implements Runnable {``
2.实现run()方法。
@Override public void run() {``` 3.编写一个执行10次的循环。在每个循环中,创建一个Date对象,并把它写入到文件中,然后调用TimeUnit类的SECONDS属性的sleep()方法来挂起线程一秒钟。这个值将让线程休眠大概1秒钟。sleep()方法会抛出InterruptedException异常,我们必须捕获并处理这个异常。最佳实践是,当线程被中断时,释放或者关闭线程正在使用的资源。
for (int i = 0; i i++) {
System.out.printf("%s\n", new Date()); try { TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
System.out.printf("The FileClock has been interrupted");
}
}
}`
4.实现范例的主类。创建一个名为FileMain的类并包含main()方法。
public class FileMain { public static void main(String[] args) {``` 5.创建FileClock类的一个对象,并用它作为传入参数来创建一个Thread对象,然后运行这个线程。
FileClock clock=new FileClock();
Thread thread=new Thread(clock);
thread.start();`
6.调用TimeUnit类的SECONDS属性的sleep()方法,休眠5秒钟。
try { TimeUnit.SECONDS.sleep(5); } catch (InterruptedException e) { e.printStackTrace(); };``` 7.中断FileClock线程。 thread.interrupt();`` 8.运行这个范例并且观察结果。 当运行这个范例时,你可以看到程序每间隔一秒钟就会输出实际的时间,接下来是FileClock线程已经被中断的信息。 当调用sleep()方法之后,线程会释放CPU并且不再继续执行任务。在这段时间内,线程不占用CPU时钟,所以CPU可以执行其他的任务。 如果休眠中线程被中断,该方法就会立即抛出InterruptedException异常,而不需要等待到线程休眠时间结束。 更多信息
惊艳!Alibaba内部流行的“Java突击宝典”,程序员升职加薪必备 Alibaba作为一线互联网公司的代表,是大部分程序员梦寐以求的工作场所,确实大厂出来的程序员,其背景也更值钱,含金量也会更高。实际上,Alibaba程序员早已成为行业内学习的榜样和标杆,但实际上光鲜的背后付出的血汗是我们没看到的。那么阿里程序员平常都是怎么学习的呢?
进阶面试皆宜!阿里强推Java程序员进阶笔记,差距不止一点点 程序员要如何成长这个问题,一直是各大网站、论坛的热点。对此网络上众说纷纭,一千个读者里面就有一千个哈姆雷特。LZ觉得想要让个人技能成长速度,大于公司规模或业务的成长速度,不断优化自己,成为一名“不错”的程序员主要需要掌握以下学习方法与实战技巧。
年薪120W的架构师简历你见过吗?java程序员该如何达到? 第一个问题是,“大多数Java开发人员都在哪里,我们中有多少人?”我们回答了这个问题,把我们能得到的最准确的信息结合起来,然后推断出我们认为是一个受过良好教育的猜测。
最壕逆天改命:18名Java程序员凭阿里P8笔记,同时斩获大厂offer 上高中时由于看了一本《坏蛋怎么练成的》从此一发不可收拾,对小说的痴迷渐渐成了病态,上课看下课看,成绩一落千丈,还好高三幡然醒悟勉勉强强上了一个“野鸡”二本,学了所有男生都喜欢的计算机专业;
终于拿到了爆火全网的进一线大厂程序员必看的1700道java面试题 爆火全网的进一线大厂程序员必看的1700道java面试题到底有多牛? 牛不牛不敢说,但是有好多程序员是靠这一套1700道高频面试题,顺利收到很多大厂offer! 以至于,到现在为止,大厂都开始按照这一套1700道面试题来对程序员进行考核!
颜色填充(程序员面试金典08.10)Java深度优先遍历实现 编写函数,实现许多图片编辑软件都支持的「颜色填充」功能。 待填充的图像用二维数组 image 表示,元素为初始颜色值。初始坐标点的行坐标为 sr 列坐标为 sc。需要填充的新颜色为 newColor 。
「 代码性能优化 」作为一名Java程序员,你真的了解 synchronized 吗?(三) 文接上篇,本文将继续介绍 Synchronized,感兴趣的小伙伴继续跟博主一起讨论下。 更多、更体系化的内容请持续关注博主,您的 关注、点赞、收藏 都将是小编持续创作的动力!
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
相关文章
- java基础知识回顾之java Thread类学习(三)--java线程实现常见的两种方式实现好处:
- Java实现 LeetCode 面试题 01.07. 旋转矩阵(按照xy轴转+翻转)
- Java实现 LeetCode 999 车的可用捕获量(简单搜索)
- Java实现格子取数问题
- Java实现 洛谷 P1738 洛谷的文件夹
- Java实现 蓝桥杯VIP 算法训练 回文数
- Java实现 蓝桥杯VIP 算法训练 方格取数
- Java实现 蓝桥杯VIP 算法训练 数的统计
- Java实现 蓝桥杯VIP 算法训练 求指数
- (Java实现) 最大团问题 部落卫队
- 【JAVA】java中char类型数组用数组名打印结果不是地址值而是数组内容
- 【JAVA】Java循环语句中的continue跳转进入下一次循环是否判断循环条件
- Java对象转xml报文和xml报文转Java对象帮助类
- Java核心知识点学习----线程同步工具类,CyclicBarrier学习
- java线程实现
- Java线程池中submit()和execute之间的区别?
- 安卓逆向7,frida小练习,hook java 层密码校验函数,绕过密码验证,进入下一个界面
- 《java虚拟机》----java内存模型与线程
- 灵魂拷问:Java对象的内存分配过程是如何保证线程安全的?(阿里面试)
- Java结束线程的三种方法(爱奇艺面试)
- Atitit 搜索蓝牙设备 powershell的实现 java noede.js python 先用脚本语言python nodejs,不好实现。。Java 也不好实现。。 Netcore可以,
- Java中的线程到底有哪些安全策略
- 阿里规约《线程资源必须通过线程池提供,不允许在应用中自行显式创建线程》&Java 线程池和多线程编程 ——线程池理解与创建
- 解决idea出现的java.lang.OutOfMemoryError: Java heap space的问题
- 详解jvm之java类加载机制和类加载器(ClassLoader) 深入理解Java类加载器(ClassLoader) 如何自定义类加载器 深入说明双亲委派 双亲委派模型的破坏者-线程上下文类加载器
- Java如何获取IP属地 ip2region failed to create searcher with x:java.io.FileNotFoundException:( 系统找不到指定的路径)
- java线程池
- JAVA语言之Java 中不同的并行实现的性能比较
- Java如何比较两个数组?
- Java JDK 版本的区别
- JAVA开发讲义(一)-Java的自白