文档章节

线程的休眠和恢复

柳哥
 柳哥
发布于 2015/04/24 22:33
字数 487
阅读 412
收藏 1

程序的一个线程每隔一分钟检查一次传感器状态,其余时间什么都不做。在这段空闲时间,线程不占用计算机的任何资源。当它继续执行的CPU时钟来临时,JVM会选中它继续执行。可以通过线程的sleep()方法来达到这个目标。sleep()方法接受整型数值作为参数,以表明线程挂起执行的毫秒数。当线程休眠时间结束,JVM会分给它CPU时钟,线程将继续执行它的指令。

sleep()方法的另一种使用方式是通过TimeUnit枚举类元素进行调用。这个方法也使用Thread类的sleep()方法来使当前线程休眠,但是它接收的参数单位是秒(分,小时等等),最后会被转化成毫秒。

package concurrency;

import java.util.Date;
import java.util.concurrent.TimeUnit;

public class FileClock implements Runnable {
    @Override
    public void run() {
        for(int i = 0;i < 10; i++){
            System.out.printf("%s\n", new Date());
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                System.out.printf("The FileClock has been interrupted");
            }
        }
    }
    public static void main(String[] args) {
        FileClock clock = new FileClock();
        Thread thread = new Thread(clock);
        thread.start();
        try {
            TimeUnit.SECONDS.sleep(5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        thread.interrupt();
    }
}

sleep()方法会抛出InterruptedException异常,我们必须捕获并处理这个异常。最佳实践是,当线程被中断时,释放或者关闭线程正在使用的资源。

当调用sleep()方法之后,线程会释放CPU并且不再继续执行任务。在这段时间内,线程不占用CPU时钟,所以CPU可以执行其它任务。如果休眠中线程被中断,该方法就会立即抛出InterruptedException异常,而不需要等待线程休眠时间结束。

java并发API还提供了另外一个方法来使线程对象释放CPU,即yield()方法,它将通知JVM这个线程对象可以释放CPU了。JVM并不保证遵循这个要求。通常来说,yield()方法只做调试使用。


© 著作权归作者所有

共有 人打赏支持
上一篇: 等待线程的终止
下一篇: 线程中断的控制
柳哥
粉丝 203
博文 405
码字总数 347782
作品 0
杭州
技术主管
私信 提问
Java并发编程初级篇(三):线程状态以及状态转换过程

线程状态: NEW:当一个线程被创建之初,那么此时线程就是新生状态,此状态下线程已经分配完毕内存空间。 RUNNABLE:当调用Thread.start()方法后,线程进入就绪状态,此时线程并不会马上开始...

阿拉德大陆的魔法师
2016/11/22
45
0
Android使用Thread的interrupt与sleep,重启或暂停线程任务

Android使用Thread的interrupt与sleep,重启或暂停线程任务 本文给出一个例子,简单说明如何在Android诸如Activity中,重启或者暂停一个正在无限运作的线程。 需求描述:假设在Android的Act...

开开心心过
2017/11/20
0
0
性能优化(9)-Android ANR在线监控原理

主目录见:Android高级进阶知识(这是总目录索引) [This tutorial was written by 无心追求] Android中的Watchdog 在Android中,Watchdog是用来监测关键服务是否发生了死锁,如果发生了死锁...

ZJ_Rocky
2017/12/04
0
0
Android ANR在线监控原理

Android中的Watchdog 在Android中,Watchdog是用来监测关键服务是否发生了死锁,如果发生了死锁就kill进程,重启SystemServer Android的Watchdog是在SystemServer中进行初始化的,所以Watch...

无心追求
2017/12/02
0
0
Thread->sleep、wait、join使用

Thread sleep、wait、join使用 这里先介绍join,然后把两个有关联的sleep和wait一起介绍. join() 这个方法比较好理解,当前线程等待指定线程终止后在执行,将两个交替执行的线程合并为顺序执行的...

zly921112
2017/05/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

最重要的是做什么,而不是怎么做。

最重要的是做什么,而不是怎么做。 做什么是战略,怎么做是战术。将军下令说,天黑前拿下这座山头,这是战略。手下的士兵可以不知道为什么要拿下这座山头,还非得是天黑之前,但士兵必须知道...

我是菜鸟我骄傲
50分钟前
0
0
w, vmstat, top, sar, nload命令查看系统状态信息

w/uptime 查看系统负载 cat /proc/cpuinfo 查看cpu核数 vmstat 监控系统状态,用法 vmstat 1,关键的几列: r, b, swpd, si, so, bi, bo, us, wa top 查看进程使用资源情况 top -c 显示详细的...

野雪球
今天
2
0
小白创建一个spring boot项目

进入 https://start.spring.io/

lilugirl
今天
3
0
Alibaba Java诊断利器Arthas实践--使用redefine排查应用奇怪的日志来源

背景 随着应用越来越复杂,依赖越来越多,日志系统越来越混乱,有时会出现一些奇怪的日志,比如: [] [] [] No credential found 那么怎样排查这些奇怪的日志从哪里打印出来的呢?因为搞不清...

hengyunabc
今天
2
0
home hosts

home hosts lwk@qwfys:~$ cat /etc/hosts127.0.0.1 localhost127.0.1.1 qwfys192.168.56.101vm600.qwfys.com39.108.212.91alpha1.ppy.com39.108.117.122alpha2.p......

qwfys
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部