让线程睡眠的sleep方法

  • Thread类有一个静态的sleep方法,当一个执行中的线程调用了Thread的sleep方法,调用线程就会让出指定时间的执行权,也就是在这期间不参与CPU调度,但是该线程持有的除了CPU以外的资源是不允许让出的,指定的睡眠时间到了后该函数会正常返回,线程就会处于就绪状态,然后参与CPU的调度,在获取到CPU的资源后就可以继续运行了。如果在睡眠期间被其他线程调用了interrupt()方法中断了该线程,则该线程会在调用sleep方法会抛出InterruptedException异常而返回。

    package com.heiye.temp;
    
    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock; public class SleepTest2 {
    //创建一个独占锁
    public static final Lock lock=new ReentrantLock(); public static void main(String[] args) {
    //创建线程A
    Thread threadA=new Thread(new Runnable() {
    @Override
    public void run() {
    //获取独占锁
    lock.lock();
    try{
    System.out.println("child threadA is in sleep");
    Thread.sleep(10000);
    System.out.println("child threadA is in awaked");
    } catch (InterruptedException e) {
    e.printStackTrace();
    } finally {
    //释放锁
    lock.unlock();
    }
    }
    }); //创建线程B
    Thread threadB=new Thread(new Runnable() {
    @Override
    public void run() {
    //获取独占锁
    lock.lock();
    try{
    System.out.println("child threadB is in sleep");
    Thread.sleep(10000);
    System.out.println("child threadB is in awaked");
    } catch (InterruptedException e) {
    e.printStackTrace();
    } finally {
    //释放锁
    lock.unlock();
    }
    }
    }); //启动线程
    threadA.start();
    threadB.start();
    }
    }

    如上代码首先会创建一个独占锁,然后创建两个线程,每个线程在内部首先会获得锁,然后睡眠,睡眠结束后会释放锁,尽管A先睡眠,但是锁仍然是A的。

  • 当一个线程处于睡眠状态下,如果另外一个线程中断了它,会不会调用sleep方法判处异常?

    package com.heiye.temp;
    
    public class SleepTest3 {
    public static void main(String[] args) throws InterruptedException {
    //创建线程
    Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
    try {
    System.out.println("child thread is in sleep");
    Thread.sleep(10000);
    System.out.println("child thread is in awaked");
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    }); thread.start();
    //主线程休眠2秒
    Thread.sleep(2000);
    //主线程中断子线程
    thread.interrupt();
    }
    }

  • 子线程在睡眠期间,主线程中断了它,所以子线程在调用sleep方法会判处InterruptedException异常。

4-让线程睡眠的sleep方法的更多相关文章

  1. android里面线程睡眠事件使用方法

    SystemClock.sleep(时间); 不用Thread.sleep()的原因:要抛异常,占用资源

  2. “全栈2019”Java多线程第五章:线程睡眠sleep()方法详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  3. 09_控制线程_线程睡眠sleep

    [线程睡眠] 如果需要让当前正在执行的线程暂停一段时间,并进入阻塞状态,则可以通过调用Thread类的静态方法sleep()方法来实现. sleep()方法有两种重载形式: 1.static void ...

  4. 模拟做饭系统(java+线程中的join方法)

    (一)项目框架分析 妈妈要去做饭,发现没有酱油,让儿子去买酱油,然后回来做饭. 根据面向对象的思想,有两个对象,妈妈和儿子 主要有两个方法: (一)没有线程控制(即儿子没有买酱油回来妈妈就做好饭了)+ ...

  5. Java中线程的使用 (2)-多线程、线程优先级、线程睡眠、让步、阻塞

    Java中线程的使用 (2)-多线程.线程优先级.线程睡眠.让步.阻塞 (一)多线程使用方法 说明:创建每个新的线程,一定要记得启动每个新的线程(调用.start()方法) class Xc3 ext ...

  6. JAVA线程sleep和wait方法区别

    一. sleep 是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复,调用sleep 不会释放对象锁.由于没有释放对象锁,所以不能 ...

  7. Java中终止线程的三种方法

    终止线程一般建议采用的方法是让线程自行结束,进入Dead(死亡)状态,就是执行完run()方法.即如果想要停止一个线程的执行,就要提供某种方式让线程能够自动结束run()方法的执行.比如设置一个标志来 ...

  8. C#传递参数到线程的n个方法

    [转]http://kb.cnblogs.com/a/888688/ 本片文章的议题是有关于传递参数到线程的几种方法. 首先我们要知道什么是线程,什么时候要用到线程,如何去使用线程,如何更好的利用线程 ...

  9. java中线程池的使用方法

    1 引入线程池的原因 由于线程的生命周期中包括创建.就绪.运行.阻塞.销毁阶段,当我们待处理的任务数目较小时,我们可以自己创建几个线程来处理相应的任务,但当有大量的任务时,由于创建.销毁线程需要很大的 ...

随机推荐

  1. java 文件上传(图片上传)

    1.FTP工具类 代码如下: package com.taotao.common.utils; import java.io.File; import java.io.FileInputStream; ...

  2. STM32+Air202+Air530+HXDZ-30102-ACC心率血氧GPS采集上传到阿里云

    所有资料都在QQ群1121445919 主要功能 HXDZ-30102-ACC采集心率血氧数据 STM32通过串口将数据转发到air202模块 air202将数据上传到阿里云平台进行展示与处理 整合合 ...

  3. golang中的三个点 ‘...‘ 的用法

    '-' 其实是go的一种语法糖. 它的第一个用法主要是用于函数有多个不定参数的情况,可以接受多个不确定数量的参数. 第二个用法是slice可以被打散进行传递. 下面直接上例子: func test1( ...

  4. Qt编译工程提示qt creator no rule to make target opencv2/core/hal/interface.h need by debug解决方法

    总是提示 qt creator no rule to make target opencv2/core/hal/interface.h need by debug解决方法: 也算是花了整整两个小时踩坑 ...

  5. GUI编程路线

    基本路线

  6. Reinforcement Learning 强化学习入门

    https://www.zhihu.com/question/277325426 https://github.com/jinglescode/reinforcement-learning-tic-t ...

  7. 记一次 .NET 某新能源汽车锂电池检测程序 UI挂死分析

    更多高质量干货:参见我的 GitHub: dotnetfly 一:背景 1. 讲故事 这世间事说来也奇怪,近两个月有三位朋友找到我,让我帮忙分析下他的程序hangon现象,这三个dump分别涉及: 医 ...

  8. 【机器学习|数学基础】Mathematics for Machine Learning系列之线性代数(1):二阶与三阶行列式、全排列及其逆序数

    @ 目录 前言 二阶与三阶行列式 二阶行列式 三阶行列式 全排列及其逆序数 全排列 逆序数 结语 前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出-   自我介绍 ...

  9. poll?transport=longpoll&connection...烦人的请求c

    1.问题描述: 最近使用miniui做了一个后台管理系统,打开浏览器调试时,总发现一堆无关的请求,结构大致是:poll?transport=longpoll&connection.....一直 ...

  10. 数据导出生成word附件使用POI的XWPFTemplate对象

    比较常用的实现Java导入.导出Excel的技术有两种Jakarta POI和Java Excel.Jakarta POI 是一套用于访问微软格式文档的Java API.Jakarta POI有很多组 ...