如何检测Java中的死锁?

虽然这可以有很多答案,但我的版本是首先我会看看代码,如果我看到一个嵌套的同步块,或从一个同步的方法调用其他同步方法,或试图在不同的对象上获取锁,如果开发人员不是非常小心,就很容易造成死锁。

另一种方法是在运行应用程序时实际锁定时找到它,尝试采取线程转储,在Linux中,你可以通过kill-3命令执行此操作,这将打印应用程序日志文件中所有线程的状态,并且你可以看到哪个线程被锁定在哪个线程对象上。

你可以使用fastthread.io网站等工具分析该线程转储,这些工具允许你上载线程转储并对其进行分析。

另一种方法是使用jConsole或VisualVM,它将显示哪些线程被锁定以及哪些对象被锁定。

如果你有兴趣了解故障排除工具和分析线程转储的过程,我建议你看看UriahLevy在多元视觉(PluraIsight)上《分析Java线程转储》课程。旨在详细了解Java线程转储,并熟悉其他流行的高级故障排除工具。

编写一个将导致死锁的Java程序?

一旦你回答了前面的问题,他们可能会要求你编写代码,这将导致Java死锁。

这是我的版本之一

如果method1()和method2()都由两个或多个线程调用,则存在死锁的可能性,因为如果线程1在执行method1()时在Sting对象上获取锁,线程2在执行method2()时在Integer对象上获取锁,等待彼此释放Integer和String上的锁以继续进行一步,但这永远不会发生。

此图精确演示了我们的程序,其中一个线程在一个对象上持有锁,并等待其他线程持有的其他对象锁。

你可以看到,Thread1需要Thread2持有的Object2上的锁,而Thread2希望获得Thread1持有的Object1上的锁。由于没有线程愿意放弃,因此存在死锁,Java程序被卡住。

其理念是,你应该知道使用常见并发模式的正确方法,如果你不熟悉这些模式,那么JosePaumard《应用于并发和多线程的常见Java模式》是学习的好起点。

linux怎么用jconsole_linux中jconsole相关推荐

  1. php文件内含有隐藏的^m字符,【整理】如何取消Linux下,vi中显示的^M符号

    [整理]如何取消Linux下,vi中显示的^M符号 [背景知识] ^M 是ascii中的'\r', 回车符,是16进制的0x0D,8进制的015,十进制的13. 对于换行这个动作,unix下一般只有一 ...

  2. linux平台下QtCreator中集成Valgrind系列工具

    linux平台下QtCreator中集成Valgrind系列工具 ###1.valgrind 安装 valgrind 安装 2.打开QtCreator >> Analyze 你就会发现 这 ...

  3. Apache源码包在LINUX(CENTOS6.8)中的安装(出现问题及解决)

    任务:在CENT6.8系统中安装Apache(版本为:httpd-2.4.41) 前提:由于源码包必须先编译后安装,所以必须先安装编译器:gcc 理论步骤: 1.检测gcc软件包,如果不存在则进行安装 ...

  4. Linux服务器生产环境中的文件删除与替换

    在Linux运维中经常遇到要替换Linux服务器系统程序或者业务应用程序文件的情况,很多人都会担心,直接替换会不会导致Linux系统程序崩溃或者应用程序崩溃,而需要关闭服务才敢替换,今天在freebu ...

  5. 详解Linux交互式shell脚本中创建对话框实例教程

    详解Linux交互式shell脚本中创建对话框实例教程 本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一 ...

  6. linux文件删除指定内容,Linux bash删除文件中含“指定内容”的行功能示例

    本文实例讲述了Linux bash删除文件中含"指定内容"的行功能.分享给大家供大家参考,具体如下: #!/bin/sh # 功能: 删除文件中含"指定内容"的 ...

  7. linux命令---查找文件中的内容

    linux命令---查找文件中的内容 [yang@localhost ~]$ cat 1.txt |egrep '123456789|second'-------匹配123456789或者second ...

  8. Linux下高性能网络编程中的几个TCP/IP选项

    Linux下高性能网络编程中的几个TCP/IP选项 转自:http://blog.chinaunix.net/u/12592/showart.php?id=2064847 最近在新的平台上测试程序,以 ...

  9. Linux内核源码中使用宏定义的若干技巧

    在C中,宏定义的概念虽然简单,但是真要用好却并不那么容易,下面从Linux源码中抽取一些宏定义的使用方法,希望能从中得到点启发: 1. 类型检查 比如module_init的宏定义: 点击(此处)折叠 ...

  10. linux在文档中查找内容,【Linux】用grep在文档中查找内容

    有时候,我们需要在文档中查找一些内容,常用grep.它在文档查找相关内容并输出匹配行. > 查找某关键字 在system.log中,查找包含keyword的行 grep 'keyword' sy ...

最新文章

  1. docsify-edit-on-github
  2. 经典C语言程序100例之二五
  3. dfs记忆化搜索(带限制的选择问题) 讲解:LeetCode打家劫舍||| / 蓝桥 地宫取宝/蓝桥 k进制数//剪格子//方格分割
  4. WordPress中文SEO优化建议
  5. 三级数据库考mysql_计算机三级MySQL数据库试题及答案
  6. windows批量ping脚本
  7. 网络攻防技术——环境变量与set-uid实验
  8. 韩立刚计算机网络笔记-第04章 数据链路层
  9. matlab 如何读取二进制、十六进制txt文档
  10. 京东实习笔试——站队
  11. [ESP8266学习笔记]components_nvs 非易失性存储 Non-Volatile Storage(NVS),保存数据到flash
  12. Android 多语言国家代码清单及values命名
  13. java实现hbase表创建、数据插入、删除表
  14. 深度学习笔记--基于Pytorch搭建VGG16网络
  15. js实现左右来回运动效果实例
  16. HDU 6333 Problem B. Harvest of Apples(莫队离线)
  17. 话题情感混合模型(JST)
  18. L1-040 最 佳情侣身高差
  19. 香港电台知名主持人梁继璋写给儿子的一封信
  20. 微信小程序 云开发 订阅消息 获取下发权限失败 errCode: 20001

热门文章

  1. Caffe框架-入门浅谈及碰到的坑
  2. Catia CAA二次开发视频教程+源代码+PDF教程
  3. 贴片电阻封装功率数据选型
  4. python爬虫:抓取某易云音乐歌曲歌词
  5. 计算机网络说课教案,认识计算机网络说课稿PPT课件.ppt
  6. mysql pxc介绍_MySQL高可用之PXC简介
  7. H5第三方专业支付接口、安全稳定、费率优惠
  8. 第三方支付api接口是什么?
  9. 安卓手机阅读器_电子阅读器怎么选择全价位攻略(少走坑)
  10. SCI-HUB 印度被诉、twitter账号被封,是梁上君子还是罗宾汉?