死锁

死锁:过多的同步可能造成互相不释放资源,从而相互等待,一般发生与同步中持有多个对象的锁
避免:不要在同一个代码块中,同时持有多个对象的锁

/*** 死锁:过多的同步可能造成互相不释放资源,从而相互等待,一般发生与同步中持有多个对象的锁*避免:不要在同一个代码块中,同时持有多个对象的锁* @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——死锁及解决方案相关推荐

  1. Java的知识点33——JDBC

          测试与数据库建立连接 package cn.dym01;import java.sql.Connection; import java.sql.DriverManager; import ...

  2. Java中的死锁及其解决方案

    Java中的死锁及其解决方案 在Java中,锁是很常见的一个工具,常见的用法就是在高并发场景下保证线程安全,但是使用不当也会造成死锁,给我们带来一些不必要的麻烦,本文分析死锁及其产生原因,并作出相应的 ...

  3. 浅谈JAVA中的死锁以及解决方案

    目录 JAVA中死锁的定义: 死锁实例 1)实例业务场景 解决方案:定义锁的顺序,并且整个应用中都按照这个顺序来获取锁. 2)实例业务场景 解决方案: 总结造成死锁的原因: 如何防患? 定位死锁(解决 ...

  4. 【2021秋招】Java 面试知识点【精华背诵版】

    Java 开发知识点[背诵版] Java 基础 40 语言特性 12 Q1:Java 语言的优点? ① 平台无关性,摆脱硬件束缚,"一次编写,到处运行". ② 相对安全的内存管理和 ...

  5. Java 面试知识点【精华背诵版】

    Java 开发知识点[背诵版] Java 基础 40 语言特性 12 Q1:Java 语言的优点? ① 平台无关性,摆脱硬件束缚,"一次编写,到处运行". ② 相对安全的内存管理和 ...

  6. 最全最新的的Java核心知识点整理!!! 【推荐】

    前言: 想要文档版的小伙伴们可以私信我领取哦,更加清晰 一目了然 ~ Java核心知识点! 博客整理出来的稍微有点乱~ 目录 目录 -1 JVM - 19 2.1. 线程 - 20 2.2. JVM ...

  7. 整理的java基础知识点笔记

    java基础知识点 (涉及到图片的资源因为在电脑本地,挨个挨个找太浪费时间就不找了) 基础点 **字节:**每逢8位是一个字节,这是数据存储的最小单位. 计算机中的数据转换: ​ 1 Byte = 8 ...

  8. JAVA基础--JAVA SE(知识点总结 Ⅴ )

    前面内容请见: JAVA基础–JAVA SE(知识点总结 Ⅰ ) JAVA基础–JAVA SE(知识点总结 Ⅱ ) JAVA基础–JAVA SE(知识点总结 Ⅲ ) JAVA基础–JAVA SE(知识 ...

  9. Java面试知识点(全)- Java面试基础部分三

    Java面试知识点(全)https://nanxiang.blog.csdn.net/article/details/130640392 注:随时更新 文章目录 ThreadPoolExecutor ...

最新文章

  1. resamplingEnabled属性
  2. Swift3.0温习之基础篇
  3. Linux MySQL 5.1.62 source install
  4. 从能用到好用,GIS信创如何做到行稳致远?
  5. android应用自动打开网页,Android 使用Scheme实现从网页启动APP
  6. python入门系列:迭代器和生成器
  7. 贝叶斯集锦:MCMCpack包
  8. 最新GitHub新手使用教程(Windows Git从安装到使用)——详细图解
  9. Hibernate入门第一讲——Hibernate框架的快速入门
  10. 最近京东抢茅台的很火啊,但是必须要京东plus会员。天猫超市抢茅台插件来咯
  11. Linux常用命令-时刻更新
  12. oracle存储过程(写法+实战)
  13. 如何从外网访问校园内网
  14. 【机器学习】Radius Neighbors Classifier(rNN,radius nearest neighbors)
  15. 国外大牛的黑苹果配置清单
  16. 掌纹与掌静脉融合matlab代码,一种基于人脸和掌纹掌静脉识别的身份比对方法与流程...
  17. Java获取一年有多少周、某周的第一天和最后一天,当前时间所在当年的实际周数
  18. 控制台小游戏-贪吃蛇,c++和c#版
  19. 2020最新版LaTeX软件教程---Tex live 2020的安装与使用
  20. 获取1688app上原数据 API

热门文章

  1. Oracle Exception
  2. sqlserver 2008r2 表分区拆分问题
  3. HUD 1043 Eight 八数码问题 A*算法 1667 The Rotation Game IDA*算法
  4. ARM汇编 beq和bne
  5. 区域显示触发_天涯明月刀手游五行藏珍天机奇遇怎么触发?五行藏珍天机奇遇攻略...
  6. python3邮件_python3使用SMTP发送HTML格式邮件
  7. pip源更换为清华源_kali2020更换国内的源
  8. 阿里P8高级架构师:面试没你想象中的难,拿Offer也可以很轻松
  9. 写一个函数返回参数二进制中 1 的个数
  10. linux/unix编程手册-56_60