Thread类中的静态方法sleep(),当一个执行中的线程调用了Thread的sleep()方法后,调用线程会暂时让出时间的执行权,这期间不参与cpu的调度,但是该线程持有的锁是不让出的。时间到了会正常返回,线程处于就绪状态,然后参与cpu调度,获取到cpu资源之后就可以运行。

如果在睡眠期间,其他线程调用了该线程的interrup()的方法中断了该线程,则该线程会调用sleep方法的地方抛出InterruptedException异常而返回

public class ThreadDemo {private static Object lock = new Object();public static void main(String[] args) {new Thread(()->{synchronized (lock){try {System.out.println("A休眠10秒不放弃锁");Thread.sleep(10000);System.out.println("A休眠10秒醒来");} catch (InterruptedException e) {e.printStackTrace();}}}).start();new Thread(()->{synchronized (lock){System.out.println("B休眠10秒不放弃锁");try {Thread.sleep(10000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("B休眠10秒醒来");}}).start();}
}

无论执行多少次,都是先A输出再B输出 或者先B输出再A输出,不会出现交叉输出的情况,
因为A获取到锁之后,即使是sleep也不会释放锁,因B获取不到锁,也就无法执行。

输出结果

A休眠10秒不放弃锁
A休眠10秒醒来
B休眠10秒不放弃锁
B休眠10秒醒来

或者

B休眠10秒不放弃锁
B休眠10秒醒来
A休眠10秒不放弃锁
A休眠10秒醒来

sleep方法的使用,进入sleep状态不释放锁相关推荐

  1. 附加类型”XXXX“的实体失败,因为相同类型的其他实体已具有相同的主键值。在使用 “Attach“ 方法或者将实体的状态设置为 “Unchanged“ 或 “Modified“

    因为相同类型的其他实体已具有相同的主键值.在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified&quo ...

  2. P576线程P582多线程P583startP584Runnable创建线程P58子线程应用P587退出P588方法P591守护线程P592线程7大状态P593同步P594互斥锁P596释放锁P598

    576线程-P598作业2 P576线程 P582多线程机制 public class Thread01 {public static void main(String[] args) {//创建Ca ...

  3. yield方法释放锁吗_死磕Synchronized底层实现重量级锁

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:farmerjohngit 链接:https://github.com/farmer ...

  4. 多线程的三种实现方法、线程类的常见方法、线程安全问题:synchronized和Lock锁、生产者和消费者问题

    1. 多线程的三种实现方式 1.1 继承Thread类 实现步骤: 定义一个类MyThread继承Thread类 在MyThread类中重写run()方法 创建MyThread类的对象 启动线程sta ...

  5. boost::log模块测试get_attributes()这个const方法可以获取线程模型内部的互斥锁

    boost::log模块测试get_attributes这个const方法可以获取线程模型内部的互斥锁 实现功能 C++实现代码 实现功能 boost::log模块测试get_attributes() ...

  6. yield方法释放锁吗_java多线程,让步yield

    发表于 2014-07-02 10:22:36 by 月小升 [seriesposts sid=500] package com.javaer.thread; public class YThread ...

  7. java线程join方法会释放锁吗

    java线程join方法会释放锁吗,虽然join底层使用wait,wait是释放锁的 wait()和join()的调用方的区别: object.wait()和thread.join() join()的 ...

  8. 点按钮ajax get方法修改0或1状态封装成函数

    最终效果 列表页面表格里点击按钮修改状态 按钮样式要引入bootstrap才可以用 本文件用的是laravel框架环境 larave路由里 Route::get('category/changesta ...

  9. 从 JVM 角度看 Spring 中方法执行过程和内存状态

    Spring 容器中的 Bean 默认是单例的,也就是说我们在使用被Spring管理的对象的时候,不需要重复创建了,从而节省空间. 举个例子: 作为一个 CRUD 攻城狮,平时开发最多的就是一个Web ...

最新文章

  1. UILable在Autolayout模式下面自动调节字体大小
  2. .net 根据书签往word中插入数据_word目录制作技巧:快速生成文档总目录和章节下子目录...
  3. 霍夫变换(hough transform)原理
  4. 【c++】8.map和vector容器查找、删除指定元素、emplace、insert
  5. APK加密方法:某社交类Android APP加密分享
  6. java随机产生十个坐标_java中随机坐标
  7. php显示json,PHP解决JSON中文显示问题
  8. 【Express】—get传递参数
  9. SQL Server 2017:mTVF的交错执行
  10. 2022年计算机二级考试Java语言程序设计模拟题及答案
  11. Android三大动画介绍及使用
  12. YAML和JSON对比
  13. C# DataGridView 冻结列或行
  14. c语言书面作业3,C语言程序设计
  15. 计算机电池维修心得,CMOS电池引起计算机无法启动的检修详解
  16. 名帖101 赵孟頫 小楷《采神图跋册页》
  17. 部署hudson时报错解决方案
  18. 氰化物工作室的游戏Cthulhu,或最终获得VR支持
  19. you don't have permission to access / on this server(Apache Server权限访问问题)
  20. Python爬取数据并存入MongoDB

热门文章

  1. elementui使用el-table中的el-popover,点击确定或者取消后关闭按钮弹窗
  2. Multicast Routing
  3. 慧星形聚乙二醇修饰碳量子点阿霉素纳米前*(DOX-Hy-CQD-SS-PEG)|CdSeQDs@CuNCs硒化镉量子点铜纳米簇
  4. Apollo PNC课程学习(Ⅰ)
  5. mbc连接mysql_研究miRNA,这些数据库你必须得知道!
  6. 【C++ 并发 线程池设计】深入理解C++线程池:设计、实现与应用
  7. 素数筛法(主要是欧拉筛)
  8. Sql-server数据库搭建
  9. 从0开始全新重装mac os操作系统
  10. AI超大事件丨从研究到应用,这是一份2017年AI领域的最全面总结