问题:

请写一个java死锁的程序,当时只是说了死锁的一种情况,但是没有写出来。

造成死锁的情况之一:

线程1首先获得锁a,然后再同步块中竞争锁b,线程2获得锁b,然后在同步块中竞争锁a。

此时,锁a被线程1拥有,想要获得锁b,锁b被线程2拥有,想要获得锁a,无限循环。

代码:

public class MainTest {

private Object locka = new Object();

private Object lockb = new Object();

public static void main(String[] args) {

new MainTest().deadLock();

}

public void deadLock(){

Thread thread1 = new Thread(new Runnable() {

public void run() {

synchronized (locka) {

try {

//进到这个同步代码块中,就表示当前线程获得了locka

System.out.println(Thread.currentThread().getName()+" 获得锁a!");

Thread.sleep(500);

System.out.println(Thread.currentThread().getName()+" 休眠500毫秒之后");

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println(Thread.currentThread().getName()+" 现在竞争锁b...");

synchronized (lockb) {

System.out.println(Thread.currentThread().getName()+"获得锁b!");

}

}

}

},"thread1");

Thread thread2 = new Thread(new Runnable() {

public void run() {

String thread2Name = Thread.currentThread().getName();

synchronized (lockb) {

try {

System.out.println(thread2Name+" 获得锁b!");

Thread.sleep(500);

System.out.println(thread2Name+"休眠500毫秒之后");

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println(thread2Name + " 现在竞争锁a...");

synchronized (locka) {

System.out.println(thread2Name+" 获得锁a!");

}

}

}

},"thread2");

thread1.start();

thread2.start();

}

}

运行结果:

这就是造成的死锁现象。

用java写出死锁的例子_【面试】请写一个java死锁的例子-Go语言中文社区相关推荐

  1. java进程内存一直没释放_面试官:一个线程OOM,进程里其他线程还能运行么?...

    引言 这题是一个网友@大脸猫爱吃鱼给我的提问,出自今年校招美团三面的一个真题.大致如下 一个进程有3个线程,如果一个线程抛出oom,其他两个线程还能运行么? 先说一下答案,答案是还能运行 不瞒大家说, ...

  2. java采用匈牙利命名法_【Java】工具类,如何将匈牙利命名法转换成驼峰命名法-Go语言中文社区...

    一.概念介绍 1.1.匈牙利命名法:user_id,字母均小写,不同单词间用下划线分割: 1.2.驼峰命名法:userId,除了第一个单词的首字母小写,其余单词的首字母均大写,单词之间没有符号,仅仅通 ...

  3. java 取出集合前两个数据库_【Java】获取两个List中不同的数据(效率非常不错)-Go语言中文社区...

    项目背景 刚好项目要快速对比两张表的不同数据,但是提供的是id的列表(list),另外在数据库中,所以这里想出了一个办法,先从数据库中找出有的数据in(sql)出来先,然后用代码匹对,因为这里要查出提 ...

  4. java中3 0.1_为什么java里面3*0.1=0.30000000000000004,而4*0.1=0.4?-Go语言中文社区

    作者:蓝色 链接:https://www.zhihu.com/question/56545018/answer/149620518 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  5. java读取 info.plist源码_Java 解析 IPA 文件,读取 Info.plist 信息-Go语言中文社区

    在做移动MDM功能的时候,就遇到了这样一个问题,当用户上传IPA文件时,我如何知道这个IPA文件的相关信息呢?IPA文件有一个很重要的文件Info.plist 就类似于Android程序的Manife ...

  6. python爬取旅游信息_用Python爬取分析全国旅游数据-Go语言中文社区

    前言: Python对于本人来讲也是一个在逐渐学习掌握的过程,这次的内容就从旅游开始讲起,进入正文前首先附(fang)上(du)最令我垂涎欲滴的海鲜盛宴. 数据爬取: 最近几天朋友圈被大家的旅行足迹刷 ...

  7. 利用python爬取58同城简历数据_利用python爬取58同城简历数据-Go语言中文社区

    利用python爬取58同城简历数据 最近接到一个工作,需要获取58同城上面的简历信息(http://gz.58.com/qzyewu/).最开始想到是用python里面的scrapy框架制作爬虫.但 ...

  8. 堆排序重建堆的时间复杂度_排序算法之 堆排序 及其时间复杂度和空间复杂度-Go语言中文社区...

    堆排序是由1991年的计算机先驱奖获得者.斯坦福大学计算机科学系教授罗伯特.弗洛伊德(Robert W.Floyd)和威廉姆斯(J.Williams)在1964年共同发明了的一种排序算法( Heap ...

  9. java生成word文档 图片_java生成带有图片的word的文档-Go语言中文社区

    生成带有图片的word的文档 @RequestMapping(params ="getWordByDate",produces = "text/html;charset= ...

  10. #根据列表写出循环 询问用户买什么 用户选择一个编号 把对应物品添加值物品栏 最终用户输出q时 退出循环 打印出购买的物品

    products=[['iphone',6888],['MacPro',14800],['小米6',2499],['coffe',31],['book',60],['Nike',699]] #根据列表 ...

最新文章

  1. 把java文件打包成.jar (jar命令详解)
  2. 楼市十大卖楼花招曝光〔转载〕
  3. PHP运行环境之IIS FastCGI 进程意外退出解决办法
  4. 洛谷 P2756 飞行员配对方案问题 (二分图/网络流,最佳匹配方案)
  5. UTF-8带BOM和不带BOM的转换
  6. 2.3.2. 进程互斥的软件实现方法
  7. mysql关于日期的函数_MySQL中关于日期函数汇总
  8. python追加_如何在Python中追加文件?
  9. 如何在data visualization 中update svg_如何操作小程序页面中data数据区中的数据
  10. sender分析之创建请求
  11. 如何用python中的turtle库画三角形_Python如何使用turtle库绘制图形
  12. 软路由OpenWrt教程收集(插件开发教程,opkg安装软件教程)
  13. Asp.net控件开发学习笔记(二)-控件开发基础
  14. centos7安装最新稳定版nginx
  15. 机器学习--线性回归1_线性回归-进入迷人世界的第一步
  16. mysql的驱动jar包_各版本MySQL数据库驱动程序jar包大全(java连接mysql驱动jar包)
  17. 虚拟化查看服务器sn,查看服务器操作系统序列号
  18. VScode环境变量配置
  19. 王者荣耀服务器不稳定总是跳频,vivo iQOO Pro 5G手机打玩王者荣耀网络不稳定出现断流...
  20. 什么技术都只懂一点的蹩脚程序员

热门文章

  1. 【机械仿真】基于matlab GUI智能电梯仿真系统【含Matlab源码 1087期】
  2. 【图像隐写】基于matlab WOW算法图像自适应隐写【含Matlab源码 368期】
  3. mysql连接池满了_《MySql体系结构与存储引擎》面试腾讯前总结
  4. canvas贝塞尔曲线爱心_HTML5 Canvas 绘制贝塞尔曲线 Bezier and quadratic curves
  5. 配置好网络文件还是连不上外网
  6. 问题3:filesystem:不是std的成员,filesystem:该名称的命名空间或类不存在
  7. cramer定理_线性代数部分重要定理总结
  8. moba的m是什么意思_moba游戏是什么
  9. 运算放大器的输入失调电压、失调电压漂移、输入偏置电流、输入失调电流、输入/输出电压范围、噪声指标
  10. java接口非空判断,springboot使用注解做接口非空判断