Java多线程并发编程:死锁问题实例展示

原创 「爱情、让人受尽委屈。」 2024-10-08 07:48 148阅读 0赞

死锁是多线程编程中一个常见的并发问题。当两个或更多的线程在执行过程中,因争夺资源而造成的一种互相等待的现象时,就可能出现死锁。

以下是一个简单的Java死锁示例:

  1. // 线程1需要线程2的资源
  2. class Thread1 extends Thread {
  3. private static Object lock1 = new Object();
  4. private static Object lock2 = new Object();
  5. @Override
  6. public void run() {
  7. synchronized (lock1) {
  8. System.out.println("Thread 1: Acquiring lock1...");
  9. // 线程1需要线程2的资源,这需要锁2
  10. synchronized (lock2) {
  11. System.out.println("Thread 1: Acquiring lock2...");
  12. // 此时线程2已经在使用资源了,所以线程1无法获取资源,从而陷入死锁
  13. lock2.notify();
  14. }
  15. }
  16. }
  17. }
  18. // 线程2需要线程1的资源
  19. class Thread2 extends Thread {
  20. private static Object lock1 = new Object();
  21. private static Object lock2 = new Object();
  22. @Override
  23. public void run() {
  24. synchronized (lock1) {
  25. System.out.println("Thread 2: Acquiring lock1...");
  26. // 线程2需要线程1的资源,这需要锁2
  27. synchronized (lock2) {
  28. System.out.println("Thread 2: Acquiring lock2...");
  29. // 此时线程1已经在使用资源了,所以线程2无法获取资源,从而陷入死锁
  30. lock1.notify();
  31. }
  32. }
  33. }
  34. }
  35. public class Main {
  36. public static void main(String[] args) {
  37. Thread1 thread1 = new Thread1();
  38. Thread2 thread2 = new Thread2();
  39. thread1.start();
  40. thread2.start();
  41. }
  42. }

在这个例子中,线程1需要线程2的资源(锁2),同时线程2也需要线程1的资源(锁1)。结果就是两个线程互相等待对方释放资源,从而导致死锁。

文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

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

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

相关阅读

    相关 Java线并发编程实例

    在Java多线程并发编程中,死锁是一个常见的问题。简单来说,死锁是指两个或多个线程互相等待对方释放资源,导致它们都无法继续执行的状况。 下面是一个经典的死锁实例: ```j