Java多线程并发问题:死锁和活锁的示例

原创 逃离我推掉我的手 2024-09-13 08:48 238阅读 0赞

在Java多线程编程中,死锁和活锁是常见的并发问题。以下分别提供一个死锁和活锁的简单示例。

  1. 死锁示例(基于银行系统场景):
  1. // 定义资源
  2. Resource account1 = new Resource("Account 1", 100));
  3. Resource account2 = new Resource("Account 2", 50));
  4. // 定义线程,每个线程都需要资源
  5. Thread thread1 = new Thread(new Worker(account1)));
  6. Thread thread2 = new Thread(new Worker(account2)));
  7. // 启动线程
  8. thread1.start();
  9. thread2.start();
  10. // 这里不会执行,因为会形成死锁:线程1需要账户1,但账户已被线程2占用;同理,线程2也无法获得释放。
  1. 活锁示例(基于购物车场景):
  1. // 定义资源
  2. Resource cart = new Resource("Shopping Cart", 5));
  3. // 定义线程,每个线程都需要资源
  4. Thread thread1 = new Thread(new Worker(cart)));
  5. Thread thread2 = new Thread(new Worker(cart)));
  6. // 启动线程
  7. thread1.start();
  8. thread2.start();
  9. // 这里会形成活锁:线程1和线程2交替执行,每次都会尝试将自己需要的资源放入购物车中。但由于资源有限(购物车容量5),所以始终无法成功。

以上就是Java多线程并发问题:死锁和活锁的示例。

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

发表评论

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

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

相关阅读