sleep方法的使用,进入sleep状态不释放锁
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状态不释放锁相关推荐
- 附加类型”XXXX“的实体失败,因为相同类型的其他实体已具有相同的主键值。在使用 “Attach“ 方法或者将实体的状态设置为 “Unchanged“ 或 “Modified“
因为相同类型的其他实体已具有相同的主键值.在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified&quo ...
- 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 ...
- yield方法释放锁吗_死磕Synchronized底层实现重量级锁
点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:farmerjohngit 链接:https://github.com/farmer ...
- 多线程的三种实现方法、线程类的常见方法、线程安全问题:synchronized和Lock锁、生产者和消费者问题
1. 多线程的三种实现方式 1.1 继承Thread类 实现步骤: 定义一个类MyThread继承Thread类 在MyThread类中重写run()方法 创建MyThread类的对象 启动线程sta ...
- boost::log模块测试get_attributes()这个const方法可以获取线程模型内部的互斥锁
boost::log模块测试get_attributes这个const方法可以获取线程模型内部的互斥锁 实现功能 C++实现代码 实现功能 boost::log模块测试get_attributes() ...
- yield方法释放锁吗_java多线程,让步yield
发表于 2014-07-02 10:22:36 by 月小升 [seriesposts sid=500] package com.javaer.thread; public class YThread ...
- java线程join方法会释放锁吗
java线程join方法会释放锁吗,虽然join底层使用wait,wait是释放锁的 wait()和join()的调用方的区别: object.wait()和thread.join() join()的 ...
- 点按钮ajax get方法修改0或1状态封装成函数
最终效果 列表页面表格里点击按钮修改状态 按钮样式要引入bootstrap才可以用 本文件用的是laravel框架环境 larave路由里 Route::get('category/changesta ...
- 从 JVM 角度看 Spring 中方法执行过程和内存状态
Spring 容器中的 Bean 默认是单例的,也就是说我们在使用被Spring管理的对象的时候,不需要重复创建了,从而节省空间. 举个例子: 作为一个 CRUD 攻城狮,平时开发最多的就是一个Web ...
最新文章
- UILable在Autolayout模式下面自动调节字体大小
- .net 根据书签往word中插入数据_word目录制作技巧:快速生成文档总目录和章节下子目录...
- 霍夫变换(hough transform)原理
- 【c++】8.map和vector容器查找、删除指定元素、emplace、insert
- APK加密方法:某社交类Android APP加密分享
- java随机产生十个坐标_java中随机坐标
- php显示json,PHP解决JSON中文显示问题
- 【Express】—get传递参数
- SQL Server 2017:mTVF的交错执行
- 2022年计算机二级考试Java语言程序设计模拟题及答案
- Android三大动画介绍及使用
- YAML和JSON对比
- C# DataGridView 冻结列或行
- c语言书面作业3,C语言程序设计
- 计算机电池维修心得,CMOS电池引起计算机无法启动的检修详解
- 名帖101 赵孟頫 小楷《采神图跋册页》
- 部署hudson时报错解决方案
- 氰化物工作室的游戏Cthulhu,或最终获得VR支持
- you don't have permission to access / on this server(Apache Server权限访问问题)
- Python爬取数据并存入MongoDB
热门文章
- elementui使用el-table中的el-popover,点击确定或者取消后关闭按钮弹窗
- Multicast Routing
- 慧星形聚乙二醇修饰碳量子点阿霉素纳米前*(DOX-Hy-CQD-SS-PEG)|CdSeQDs@CuNCs硒化镉量子点铜纳米簇
- Apollo PNC课程学习(Ⅰ)
- mbc连接mysql_研究miRNA,这些数据库你必须得知道!
- 【C++ 并发 线程池设计】深入理解C++线程池:设计、实现与应用
- 素数筛法(主要是欧拉筛)
- Sql-server数据库搭建
- 从0开始全新重装mac os操作系统
- AI超大事件丨从研究到应用,这是一份2017年AI领域的最全面总结