当前位置:   article > 正文

Java多线程之间引发死锁问题(1)

Java多线程之间引发死锁问题(1)

死锁代码:

  1. import java.util.concurrent.CountDownLatch;
  2. public class DeadLock {
  3. public static String obj1 = "obj1";//资源1
  4. public static String obj2 = "obj2";//资源2
  5. public static void main(String[] args) throws Exception{
  6. final CountDownLatch countdown = new CountDownLatch(1);
  7. new Thread(new Runnable() {
  8. @Override
  9. public void run() {
  10. try {
  11. countdown.await();//都进入等待
  12. synchronized(DeadLock.obj1){
  13. System.out.println(Thread.currentThread()+"has lock obj1");
  14. Thread.sleep(3000);//获取obj1后先等一会儿,让Lock2有足够的时间锁住obj2
  15. System.out.println(Thread.currentThread()+"ready to lock obj2");
  16. synchronized(DeadLock.obj2){
  17. System.out.println(Thread.currentThread()+"has lock obj2");
  18. }
  19. }
  20. }catch (Exception e) {
  21. e.printStackTrace();
  22. }
  23. }
  24. },"thread1" ).start();
  25. new Thread(new Runnable() {
  26. @Override
  27. public void run() {
  28. try {
  29. countdown.await();//都进入等待
  30. synchronized(DeadLock.obj2){
  31. System.out.println(Thread.currentThread()+"has lock obj2");
  32. Thread.sleep(3000);//获取obj1后先等一会儿,让Lock2有足够的时间锁住obj2
  33. System.out.println(Thread.currentThread()+"ready to lock obj1");
  34. synchronized(DeadLock.obj1){
  35. System.out.println(Thread.currentThread()+"has lock obj1");
  36. }
  37. }
  38. }catch (Exception e) {
  39. e.printStackTrace();
  40. }
  41. }
  42. },"thread2" ).start();
  43. countdown.countDown();
  44. }
  45. }

如何在命令行查看死锁问题?

①jps -l 查看java进程信息;

②jstack -l pid | more  查看当前java进程的堆栈状态

可以看到两个线程之间互相占用对方资源,等待释放,产生阻塞死锁。

 

在top命令中,已经获取到了占用cpu资源较高的线程pid,将该pid转成16进制的值,在thread dump中每个线程都有一个nid,找到对应的nid即可;隔段时间再执行一次stack命令获取thread dump,区分两份dump是否有差别,在nid=0x229c的线程调用栈中,发现该线程一直在执行DeadLock类第40行的run方法,得到这个信息,就可以检查对应的代码是否有问题。

解决方法: https://blog.csdn.net/MrLiar17/article/details/86623614

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/721056
推荐阅读
相关标签
  

闽ICP备14008679号