Java死锁的例子

桃扇骨 2022-07-14 07:07 235阅读 0赞

1、一个Java死锁的程序

  1. public class DeadLock {
  2. private String A = "A";
  3. private String B = "B";
  4. public static void main(String[] args) {
  5. new DeadLock().deadLock();
  6. }
  7. private void deadLock() {
  8. Thread t1 = new Thread(new Runnable() {
  9. @Override
  10. public void run() {
  11. synchronized (A) {
  12. try {
  13. Thread.sleep(2000);
  14. } catch (InterruptedException e) {
  15. e.printStackTrace();
  16. }
  17. synchronized (B) {
  18. System.out.println("Thread t1");
  19. }
  20. }
  21. }
  22. });
  23. Thread t2 = new Thread(new Runnable() {
  24. @Override
  25. public void run() {
  26. synchronized (B) {
  27. try {
  28. Thread.sleep(2000);
  29. } catch (InterruptedException e) {
  30. e.printStackTrace();
  31. }
  32. synchronized (A) {
  33. System.out.println("Thread t2");
  34. }
  35. }
  36. }
  37. });
  38. t1.start();
  39. t2.start();
  40. }
  41. }

2、编译运行Java程序

  1. [root@cent01 javatest]# javac DeadLock.java
  2. [root@cent01 javatest]# java DeadLock

3、利用 jps 查看当前的Java程序

  1. [root@cent01 ~]# jps
  2. 2672 Jps
  3. 2661 DeadLock

4、利用 jstack 查看死锁信息

  1. [root@cent01 ~]# jstack 2661
  2. Found one Java-level deadlock:
  3. =============================
  4. "Thread-1":
  5. waiting to lock monitor 0x092cba78 (object 0xa1847358, a java.lang.String),
  6. which is held by "Thread-0"
  7. "Thread-0":
  8. waiting to lock monitor 0x092cadd0 (object 0xa1847380, a java.lang.String),
  9. which is held by "Thread-1"
  10. Java stack information for the threads listed above:
  11. ===================================================
  12. "Thread-1":
  13. at DeadLock$2.run(DeadLock.java:42)
  14. - waiting to lock <0xa1847358> (a java.lang.String)
  15. - locked <0xa1847380> (a java.lang.String)
  16. at java.lang.Thread.run(Thread.java:745)
  17. "Thread-0":
  18. at DeadLock$1.run(DeadLock.java:24)
  19. - waiting to lock <0xa1847380> (a java.lang.String)
  20. - locked <0xa1847358> (a java.lang.String)
  21. at java.lang.Thread.run(Thread.java:745)
  22. Found 1 deadlock.

发表评论

表情:
评论列表 (有 0 条评论,235人围观)

还没有评论,来说两句吧...

相关阅读

    相关 一个例子

    死锁: 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。 死锁的四个必要条件:

    相关 Java最简单例子

    死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。 简单来说: 1. 线程1和线程2的执行逻