死锁:多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能进行,而导致两个或者多个线程都在等在对方释放资源。

都停止的情形。某一个同步块同时拥有两个以上对象的锁时,就会产生死锁问题。

手写一个死锁

package courrent.deadlock;

public class DeadLock {

public static void main(String[] args) {

Markup g1=new Markup(1,"丫头");

Markup g2=new Markup(0,"小红");

g1.start();

g2.start();

}

}

//口红

class Lipstick{

}

//镜子

class Mirror{}

//化妆

class Markup extends Thread{

static Lipstick lipstick=new Lipstick();

static Mirror mirror=new Mirror();

//选择

int choice;

String girl;

public Markup(int choice,String girl){

this.choice=choice;

this.girl=girl;

}

@Override

public void run() {

super.run();

makeup();

}

//相互持有对方的对象锁,才有可能造成死锁

private void makeup(){

if(choice==0){

synchronized (lipstick){

//获得口红的锁

System.out.println(this.girl+"涂口红");

//1秒后想拥有镜子

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

synchronized (mirror){

System.out.println(this.girl+"照镜子");

}

}

}else{

synchronized (mirror){

//获得镜子的锁

System.out.println(this.girl+"照镜子");

//2秒后想拥有口红

try {

Thread.sleep(2000);

} catch (InterruptedException e) {

e.printStackTrace();

}

synchronized (lipstick){

System.out.println(this.girl+"涂口红");

}

}

}

}

}

解决死锁方案,资源排序,加锁时限,死锁检测。

java死锁_Java死锁原理,手写死锁,解决死锁相关推荐

  1. python 反卷积(DeConv) tensorflow反卷积(DeConv)(实现原理+手写)

    Tensorflow反卷积(DeConv)实现原理+手写python代码实现反卷积(DeConv) 理解: https://www.zhihu.com/question/43609045/answer ...

  2. 使用java语言基于SMTP协议手写邮件客户端

    使用java语言基于SMTP协议手写邮件客户端 1. 说明 电子邮件是互联网上常见的应用,他是互联网早期的产品,直至今日依然受到广大用户的喜爱(在中国可能因为文化背景不同,电子邮件只在办公的时候常用) ...

  3. java程序填空题输出汤姆猫_Java学习之手写Tomcat“迷你汤姆猫”

    之前学习Java EE的时候,做的项目都是部署在Tomcat上面,配置web.xml(小毛驴),然后启动Tomcat,通过浏览器输入URL去访问,当时其实真的不懂好多东西,尤其是不懂request.和 ...

  4. instanceof原理--手写代码实现

    手写instanceof 首先在写之前要先理解一下instanceof的实现原理: instanceof 主要的实现原理就是只要右边变量的prototype在左边变量的原型链上即可(也就是说左边的变量 ...

  5. 【Vue源码】mustache模板引擎 - 基本使用 - 底层原理 - 手写实现

    文章目录 1. 模板引擎的介绍 1.1 模板引擎是什么? 1.2 模板引擎是怎么来的?(发展历史) 1. 使用原生的DOM操作 2. 使用数组中的join方法 3. 使用ES6反引号的方法 2. mu ...

  6. Mobx原理: 手写mobx

    手写状态管理库: Mobx mobx是一个状态管理库,类似于redux或者vuex完成状态观察相应相关的处理.mobx使得状态管理更加的简单和透明.由于这篇文章时mobx原理解析,所以关于mobx的使 ...

  7. Tensorflow反卷积(DeConv)实现原理+手写python代码实现反卷积(DeConv)

    最近看到一个巨牛的人工智能教程,分享一下给大家.教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家.平时碎片时间可以当小说看,[点这里可以去膜拜一下大神的" ...

  8. 剖析Dva原理: 手写Dva

    关于Dva: dva 是一个基于 redux 和 redux-saga 的数据流方案,然后为了简化开发体验,dva 还额外内置了 react-router 和 fetch,所以也可以理解为一个轻量级的 ...

  9. 面试官:手写一个必然死锁的例子?一顿操作猛如虎。。

    来源:blog.csdn.net/xiewenfeng520/article/details/107230996 前言 只对死锁代码感兴趣的可以直接跳到第三小节 必然死锁示例,如果对死锁还不太了解的, ...

  10. java线程同步的死锁_Java基础之线程5-线程同步死锁

    死锁:线程之间因条件相互竞争,导致线程都不能正常执行完,从而产生了死锁. 死锁的例子: public class TestDeadLock implements Runnable { public i ...

最新文章

  1. 第二课.C++基础语法
  2. 安卓高手之路之ClassLoader(总结篇)
  3. IPython 8.0大版本更新:Debug报错提示更清晰,加入自动代码补全
  4. 了解大数据在人力资源和薪资中的作用
  5. 测试公众号修改名称_微信公众号开通个人认证,只需三步
  6. centos7挂载nas存储_Geeki说丨浅谈几种存储添加主机映射方式
  7. 定期定量采购_?采购计划员必备:各种物料采购计划与订单制定的技巧与方法...
  8. 最近学到一些linq和面向对象的经验分享
  9. Filter过滤敏感词汇
  10. 怎样培养数据分析的能力
  11. 网站账号中密码的加密方式
  12. RFM、PSM、波士顿矩阵模型简介
  13. 网络逻辑漏洞、SQLMAP、Nmap及其它命令的使用方法
  14. kali无线破解实战
  15. 这个母亲节,带妈妈一起学习网络防骗术
  16. 进店率、提袋率、客单价
  17. SQL——数据定义DDL
  18. spring cloud 快速上手系列 -> 02-配置中心 Config -> 022-Config客户端
  19. Kelvin四线连接电阻测试技术及应用
  20. 针对异常java.lang.IllegalStateException onMeasure() did not set the measured dimension解决方法

热门文章

  1. 互动性可视化,打通大数据最后一公里
  2. 2021-09-06meituan-003.小美的跑腿代购
  3. Unicode字符集和多字节字符集关系(一)
  4. 关于Cisco Packet Tracer三层交换机路由配置
  5. java stream closed_java.io.IOException: Stream closed
  6. 电脑提示找不到msvcr100.dll的解决方法-msvcr100.dll丢失怎样修复
  7. mysql max 获取另外值_来看看 MySQL 的这个 BUG,坑了多少人....
  8. css面包屑导航_在CSS3中编写优美的面包屑导航菜单
  9. 雷神之锤暴力压缩算法
  10. LLVM学习笔记(43)