Java多线程同步问题:死锁示例

原创 逃离我推掉我的手 2024-09-10 13:09 245阅读 0赞

死锁在多线程编程中是一种严重的状态,即两个或更多的线程互相等待对方释放资源,从而导致都无法继续执行。

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

  1. // 假设我们有4个资源R1, R2, R3, 和R4
  2. class Resource {
  3. int id;
  4. Lock lock; // 锁对象
  5. Resource(int id) {
  6. this.id = id;
  7. lock = new Lock(id);
  8. }
  9. void acquire() { lock.lock(); }
  10. void release() { lock.unlock(); }
  11. }
  12. class Lock {
  13. int id;
  14. Lock(int id) { this.id = id; }
  15. void lock() { /* 假设锁操作是原子的 */ System.out.println("Lock " + id + " acquired"); }
  16. void unlock() { System.out.println("Lock " + id + " released")); }
  17. }
  18. // 线程1获取资源R1
  19. Thread thread1 = new Thread(() -> {
  20. Resource r1 = new Resource(1);
  21. r1.acquire();
  22. // 现在r1是线程1的资源,它不能被其他线程获取
  23. });
  24. thread1.start();
  25. // 线程2尝试获取资源R2
  26. Thread thread2 = new Thread(() -> {
  27. Resource r2 = new Resource(2);
  28. r2.acquire(); // 这里会抛出死锁异常
  29. });
  30. thread2.start();

在这个例子中,线程1先获取了资源R1,然后它进入了等待状态,等待线程2释放资源R2。同样,线程2在尝试获取资源R2时被R1占用而无法继续。

这就是典型的Java多线程死锁示例。

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

发表评论

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

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

相关阅读

    相关 Java线同步示例

    在Java多线程编程中,死锁是一种常见的并发问题。当两个或更多的线程相互等待对方释放资源时,就会发生死锁。 以下是一个简单的Java死锁示例: ```java // 创建两

    相关 Java线同步问题示例

    Java中的死锁是指两个或多个线程在执行过程中,因争夺资源而造成的一种僵局,导致这些线程无法继续执行下去。死锁发生时,每个线程都在等待其他线程释放资源,但因为没有线程愿意释放资