并发编程--锁--如何使用命令行和代码定位死锁

liaowenhui liaowenhui     2022-12-11     462

关键词:

用命令行的方式找到死锁

本地环境下,如果程序发生死锁后,首先cmd进入$JAVA_HOME/bin/中,输入jps命令,就可以查看到当前 Java 程序的 pid,找到死锁类的pid后执行jstack命令+空格+死锁类的 pid,就可以获取线程获取锁的信息。

技术图片

截取一部分和死锁相关的有用信息

技术图片

常见命令解析

(1)jps(Java Virtual Machine Process Status Tool),是java提供的一个显示当前所有java进程pid的命令,适合在linux/unix平台上简单察看当前java进程的一些简单情况。

其中PID相当于内存给它(进程)分配的名字,每个进程都有属于自己唯一的一个PID,我们可以利用找到PID来处理相应的进程,上图中27824就是pid。

技术图片

2)jstack主要用来查看某个Java进程内的线程堆栈信息.

用代码来定位死锁的方式

使用ThreadMXBean 工具类

技术图片

技术图片

运行结果

技术图片

 

python并发编程多线程死锁现象与递归锁(代码片段)

  一死锁现象所谓死锁:是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相... 查看详情

并发编程---死锁||递归锁---信号量---event事件---定时器(代码片段)

死锁互斥锁:Lock(),互斥锁只能acquire一次递归锁: RLock(),可以连续acquire多次,每acquire一次计数器+1,只有计数为0时,才能被抢到acquire#死锁fromthreadingimportThread,LockimporttimemutexA=Lock()mutexB=Lock()classMyThread(Thread):defrun(self):s 查看详情

猿创征文|深入理解高并发编程~开篇(代码片段)

...程池有啥区别?三、用户线程与守护线程四、并行与并发五、悲观锁与乐观锁1、悲观锁2、乐观锁六、CAS1、什么是CAS?2、CAS带来的问题七、那些年学过的锁1、公平锁与非公平锁2、独占锁与共享锁3、可重入锁与不可重入... 查看详情

高级程序员需知的并发编程知识(代码片段)

说明本篇是继上一篇并发编程未讨论完的内容的续篇。上一篇传送门:Java并发编程一万字总结(吐血整理)活跃性问题在上一篇我们讨论并发编程带来的风险的时候,说到其中一个风险就是活跃性问题。活跃性问题其实就是我... 查看详情

java并发编程实战读书笔记之死锁(代码片段)

...二、动态的锁顺序死锁。前言本篇学习笔记源自于《Java并发编程实战》第10章。提示:以下是本篇文章正文内容,下面案例可供参考一、锁顺序死锁看下面代码,很容易造成死锁,leftRight和rightLeft方法分别获取了l... 查看详情

java并发编程实战读书笔记之死锁(代码片段)

...二、动态的锁顺序死锁。前言本篇学习笔记源自于《Java并发编程实战》第10章。提示:以下是本篇文章正文内容,下面案例可供参考一、锁顺序死锁看下面代码,很容易造成死锁,leftRight和rightLeft方法分别获取了l... 查看详情

10并发编程-(线程)-gil全局解释器锁&死锁与递归锁(代码片段)

一、GIL全局解释器锁1、引子在Cpython解释器中,同一个进程下开启的多线程,同一时刻只能有一个线程执行,无法利用多核优势首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念。就... 查看详情

[并发编程]产生死锁的——四大必要条件和解决方案(代码片段)

[什么是死锁?]              什么是死锁?一般对“死”字使用,在我们日常生活中都是极其避讳的,而这字偏偏又搭上一个“锁”字,就好像你永远也不可能解开你暗恋女神心中的那把锁一样...    ... 查看详情

java并发编程:死锁(含代码)

JAVA大数据中高级架构2018-11-1014:04:32当线程需要同时持有多个锁时,有可能产生死锁。考虑如下情形:线程A当前持有互斥所锁lock1,线程B当前持有互斥锁lock2。接下来,当线程A仍然持有lock1时,它试图获取lock2,因为线程B正持有lo... 查看详情

java并发编程实战之互斥锁(代码片段)

文章目录Java并发编程实战之互斥锁如何解决原子性问题?锁模型Javasynchronized关键字Javasynchronized关键字只能解决原子性问题?如何正确使用Javasynchronized关键字?锁和受保护资源的合理关联关系死锁预防死锁破坏占有... 查看详情

java并发编程实战之互斥锁(代码片段)

文章目录Java并发编程实战之互斥锁如何解决原子性问题?锁模型Javasynchronized关键字Javasynchronized关键字只能解决原子性问题?如何正确使用Javasynchronized关键字?锁和受保护资源的合理关联关系死锁预防死锁破坏占有... 查看详情

python并发编程之死锁

前言在并发编程中,死锁指的是一种特定的情况,即无法取得进展,程序被锁定在其当前状态。在大多数情况下,这种现象是由于不同的锁对象(用于线程同步)之间缺乏协调,或者处理不当造成的。在这一节中,我们将讨论一... 查看详情

java并发编程回忆提纲总结(代码片段)

参考资料:《Java并发编程的艺术》用于快速回忆,详情请看书籍原文1.一些概念1.1上下文切换定义:任务从保存到再加载的过程减少上下文切换无锁并发编程:将临界资源划分给不同线程各自访问CAS算法最少线程原则:不创建无... 查看详情

实战并发编程-07循环等待&死锁问题

文章目录Pre什么是死锁死锁代码死锁产生的原因如何避免死锁1、破坏占用且等待条件2、破坏不可抢占条件3、破坏循环等待条件小结Pre【账户A】转账给【账户B】,同时【账户B】也转账给【账户A】,两个账户都需要锁住余额,... 查看详情

并发编程-线程-1.互斥锁/2.gil解释器锁/3.死锁与递归锁/4.信号量/5.event事件/6.定时器(代码片段)

1.互斥锁:原理:将并行变成串行精髓:局部串行,只针对共享数据修改保护不同的数据就应该用不用的锁1fromthreadingimportThread,Lock2importtime34n=10056deftask():7globaln8mutex.acquire()#效率低了但是数据安全了9temp=n10time.sleep(0.1)#100个线程都... 查看详情

并发编程

...操作   并行:多个线程在处理同一个操作 什么叫做并发编程:在多线程环境下,应用程序的执行 并发编程的目的:充分运用到资源,提高程序的效率 什么情况下用到并发编程:   1.在线程阻塞时,导致应用程序停止 ... 查看详情

高并发优化加锁方式时竟然死锁了!!(代码片段)

...后,终于找到了原因。为何需要优化加锁方式?在《【高并发】高并发环境下诡异的加锁问题(你加的锁未必安全)》一文中,我们在转账类TansferAccount中使用TansferAccount.class对象对程序加锁,如下所示。publicclassTansferAccountprivate... 查看详情

并发编程:生产消费模型死锁与rlock线程守护线程信号量锁(代码片段)

一、守护进程二、互斥锁三、抢票四、进程间通讯五、进程间通讯2 一、守护进程"""进程间通讯的另一种方式使用queuequeue队列队列的特点:先进的先出后进后出就像扶梯"""frommultiprocessingimportProcess,Queue#基础操作必须要掌握的#... 查看详情