Java多线程并发问题:死锁案例解析

原创 柔情只为你懂 2024-09-05 16:27 156阅读 0赞

死锁是多线程编程中的一种严重问题,当两个或更多的线程在执行过程中因争夺资源而造成的一种互相等待的现象称为死锁。

下面是一个简单的死锁案例:

  1. // 定义两个共享资源
  2. public class Resource {
  3. private int count;
  4. public Resource(int initialCount) {
  5. this.count = initialCount;
  6. }
  7. // 让线程增加资源
  8. public synchronized void increaseCount() {
  9. count++;
  10. }
  11. // 让线程减少资源
  12. public synchronized void decreaseCount() {
  13. if (count > 0) {
  14. count--;
  15. } else {
  16. throw new IllegalArgumentException("Can't decrease count to zero.");
  17. }
  18. }
  19. }
  20. // 两个线程,尝试同时增加资源
  21. public class DeadlockCase {
  22. private Resource res1;
  23. private Resource res2;
  24. public DeadlockCase() {
  25. // 初始化资源
  26. res1 = new Resource(10);
  27. res2 = new Resource(10);
  28. // 创建线程并启动
  29. Thread thread1 = new Thread(() -> increaseResource(res1, 5))));
  30. Thread thread2 = new Thread(() -> increaseResource(res2, 5))));
  31. thread1.start();
  32. thread2.start();
  33. }
  34. private void increaseResource(Resource res, int increment) {
  35. try {
  36. res.increaseCount();
  37. System.out.println("Thread " + Thread.currentThread().getName() + ": Resource increased by " + increment);
  38. } catch (IllegalArgumentException e) {
  39. System.out.println("Thread " + Thread.currentThread().getName() + ": Error occurred - " + e.getMessage());
  40. }
  41. }
  42. }

在这个案例中,线程1和线程2同时尝试增加资源,但每个线程都需要另一个线程已经增加的资源才能继续操作。这就形成了一个相互等待的死锁状态。

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

发表评论

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

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

相关阅读

    相关 Java线并发案例

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