Java中并发编程:死锁示例

原创 ﹏ヽ暗。殇╰゛Y 2024-12-04 11:12 48阅读 0赞

在Java的并发编程中,死锁是一个常见的问题。简单来说,死锁发生时,两个或多个进程(线程)因争夺资源而造成的一种互相等待的现象,若无外力干涉,它们都将无法进行下去。

以下是一个简单的Java代码示例,展示了如何创建一个可能导致死锁的场景:

  1. // 创建两个需要共享资源的线程
  2. class ResourceConsumer {
  3. private int resource;
  4. public void acquireResource() {
  5. synchronized (this) {
  6. if (resource == 0) {
  7. // 产生一个资源需求
  8. resource = 1;
  9. System.out.println("Acquired resource 1.");
  10. } else {
  11. resource++;
  12. System.out.println("Acquired resource " + resource + ".");
  13. }
  14. }
  15. }
  16. public void releaseResource() {
  17. synchronized (this) {
  18. resource--;
  19. if (resource == 0) {
  20. // 释放资源
  21. System.out.println("Released all resources.");
  22. } else {
  23. System.out.println("Released resource " + resource + ".");
  24. }
  25. }
  26. }
  27. }
  28. public class DeadLockExample {
  29. public static void main(String[] args) {
  30. ResourceConsumer consumer1 = new ResourceConsumer();
  31. ResourceConsumer consumer2 = new ResourceConsumer();
  32. // 模拟线程的启动和资源获取
  33. consumer1.acquireResource();
  34. consumer2.acquireResource();
  35. // 一旦开始,两个线程都会等待对方释放资源
  36. try {
  37. // 线程A等待资源2释放
  38. consumer2.releaseResource();
  39. // 线程B等待资源1释放
  40. consumer1.releaseResource();
  41. } catch (InterruptedException e) {
  42. e.printStackTrace();
  43. }
  44. }
  45. }

在这个例子中,两个线程consumer1consumer2都需要对方先释放资源才能获取资源。这就形成了一个经典的死锁循环,如果没有外部力量介入,它们都将无法继续执行。

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

发表评论

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

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

相关阅读