java的知识点33——死锁及解决方案
死锁
死锁:过多的同步可能造成互相不释放资源,从而相互等待,一般发生与同步中持有多个对象的锁
避免:不要在同一个代码块中,同时持有多个对象的锁
/*** 死锁:过多的同步可能造成互相不释放资源,从而相互等待,一般发生与同步中持有多个对象的锁*避免:不要在同一个代码块中,同时持有多个对象的锁* @author Administrator**/
public class DeadLock {public static void main(String[] args) {new Thread(new Makeup(1, "止兮")).start();new Thread(new Makeup(0, "小兮")).start();}
}
//口红
class Lipstick{}
//镜子
class Mirror{}
//化妆
class Makeup extends Thread{static Lipstick lipstick=new Lipstick();static Mirror mirror=new Mirror();//选择 0:先拿口红再拿镜子 其他数字:先拿镜子再拿口红int choice;//名字String girl;public Makeup(int choice, String girl) {this.choice = choice;this.girl = girl;}@Overridepublic void run() {//化妆makeup();}//相互持有对方的对象锁--》可能造成死锁private void makeup() {if(choice==0) {synchronized (lipstick) {//获得口红的锁System.out.println(this.girl+"涂口红");//1秒后想拥有镜子的锁try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}synchronized(mirror) {System.out.println(this.girl+"照镜子");}}}else {synchronized (mirror) { //获得镜子的锁System.out.println(this.girl+"照镜子");//2秒后想拥有口红的锁try {Thread.sleep(2000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}synchronized (lipstick) {System.out.println(this.girl+"涂口红");}}}}}
避免死锁
/*** 死锁:过多的同步可能造成互相不释放资源,从而相互等待,一般发生与同步中持有多个对象的锁*避免:不要在同一个代码块中,同时持有多个对象的锁* @author Administrator**/
public class DeadLock {public static void main(String[] args) {new Thread(new Makeup(1, "止兮")).start();new Thread(new Makeup(0, "小兮")).start();}
}
//口红
class Lipstick{}
//镜子
class Mirror{}
//化妆
class Makeup extends Thread{static Lipstick lipstick=new Lipstick();static Mirror mirror=new Mirror();//选择 0:先拿口红再拿镜子 其他数字:先拿镜子再拿口红int choice;//名字String girl;public Makeup(int choice, String girl) {this.choice = choice;this.girl = girl;}@Overridepublic void run() {//化妆makeup();}//相互持有对方的对象锁--》可能造成死锁private void makeup() {if(choice==0) {synchronized (lipstick) {//获得口红的锁System.out.println(this.girl+"涂口红");//1秒后想拥有镜子的锁try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}
// synchronized(mirror) {
// System.out.println(this.girl+"照镜子");
// }}synchronized(mirror) {System.out.println(this.girl+"照镜子");}}else {synchronized (mirror) { //获得镜子的锁System.out.println(this.girl+"照镜子");//2秒后想拥有口红的锁try {Thread.sleep(2000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}
// synchronized (lipstick) {
// System.out.println(this.girl+"涂口红");
// }}synchronized (lipstick) {System.out.println(this.girl+"涂口红");}}}}
java的知识点33——死锁及解决方案相关推荐
- Java的知识点33——JDBC
测试与数据库建立连接 package cn.dym01;import java.sql.Connection; import java.sql.DriverManager; import ...
- Java中的死锁及其解决方案
Java中的死锁及其解决方案 在Java中,锁是很常见的一个工具,常见的用法就是在高并发场景下保证线程安全,但是使用不当也会造成死锁,给我们带来一些不必要的麻烦,本文分析死锁及其产生原因,并作出相应的 ...
- 浅谈JAVA中的死锁以及解决方案
目录 JAVA中死锁的定义: 死锁实例 1)实例业务场景 解决方案:定义锁的顺序,并且整个应用中都按照这个顺序来获取锁. 2)实例业务场景 解决方案: 总结造成死锁的原因: 如何防患? 定位死锁(解决 ...
- 【2021秋招】Java 面试知识点【精华背诵版】
Java 开发知识点[背诵版] Java 基础 40 语言特性 12 Q1:Java 语言的优点? ① 平台无关性,摆脱硬件束缚,"一次编写,到处运行". ② 相对安全的内存管理和 ...
- Java 面试知识点【精华背诵版】
Java 开发知识点[背诵版] Java 基础 40 语言特性 12 Q1:Java 语言的优点? ① 平台无关性,摆脱硬件束缚,"一次编写,到处运行". ② 相对安全的内存管理和 ...
- 最全最新的的Java核心知识点整理!!! 【推荐】
前言: 想要文档版的小伙伴们可以私信我领取哦,更加清晰 一目了然 ~ Java核心知识点! 博客整理出来的稍微有点乱~ 目录 目录 -1 JVM - 19 2.1. 线程 - 20 2.2. JVM ...
- 整理的java基础知识点笔记
java基础知识点 (涉及到图片的资源因为在电脑本地,挨个挨个找太浪费时间就不找了) 基础点 **字节:**每逢8位是一个字节,这是数据存储的最小单位. 计算机中的数据转换: 1 Byte = 8 ...
- JAVA基础--JAVA SE(知识点总结 Ⅴ )
前面内容请见: JAVA基础–JAVA SE(知识点总结 Ⅰ ) JAVA基础–JAVA SE(知识点总结 Ⅱ ) JAVA基础–JAVA SE(知识点总结 Ⅲ ) JAVA基础–JAVA SE(知识 ...
- Java面试知识点(全)- Java面试基础部分三
Java面试知识点(全)https://nanxiang.blog.csdn.net/article/details/130640392 注:随时更新 文章目录 ThreadPoolExecutor ...
最新文章
- resamplingEnabled属性
- Swift3.0温习之基础篇
- Linux MySQL 5.1.62 source install
- 从能用到好用,GIS信创如何做到行稳致远?
- android应用自动打开网页,Android 使用Scheme实现从网页启动APP
- python入门系列:迭代器和生成器
- 贝叶斯集锦:MCMCpack包
- 最新GitHub新手使用教程(Windows Git从安装到使用)——详细图解
- Hibernate入门第一讲——Hibernate框架的快速入门
- 最近京东抢茅台的很火啊,但是必须要京东plus会员。天猫超市抢茅台插件来咯
- Linux常用命令-时刻更新
- oracle存储过程(写法+实战)
- 如何从外网访问校园内网
- 【机器学习】Radius Neighbors Classifier(rNN,radius nearest neighbors)
- 国外大牛的黑苹果配置清单
- 掌纹与掌静脉融合matlab代码,一种基于人脸和掌纹掌静脉识别的身份比对方法与流程...
- Java获取一年有多少周、某周的第一天和最后一天,当前时间所在当年的实际周数
- 控制台小游戏-贪吃蛇,c++和c#版
- 2020最新版LaTeX软件教程---Tex live 2020的安装与使用
- 获取1688app上原数据 API
热门文章
- Oracle Exception
- sqlserver 2008r2 表分区拆分问题
- HUD 1043 Eight 八数码问题 A*算法 1667 The Rotation Game IDA*算法
- ARM汇编 beq和bne
- 区域显示触发_天涯明月刀手游五行藏珍天机奇遇怎么触发?五行藏珍天机奇遇攻略...
- python3邮件_python3使用SMTP发送HTML格式邮件
- pip源更换为清华源_kali2020更换国内的源
- 阿里P8高级架构师:面试没你想象中的难,拿Offer也可以很轻松
- 写一个函数返回参数二进制中 1 的个数
- linux/unix编程手册-56_60