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

原创 骑猪看日落 2024-09-12 16:27 303阅读 0赞

在Java中,死锁通常发生在两个或更多线程互相等待对方释放资源时的情况。以下是一个简单的死锁示例:

  1. public class DeadlockExample {
  2. // 线程1需要的资源
  3. private Object resource1 = new Object();
  4. // 线程2需要的资源
  5. private Object resource2 = new Object();
  6. public void startThreads() {
  7. Thread thread1 = new Thread(() -> acquireResource(resource1)));
  8. Thread thread2 = new Thread(() -> acquireResource(resource2)));
  9. thread1.start();
  10. thread2.start();
  11. }
  12. // 线程尝试获取资源
  13. private synchronized void acquireResource(Object resource) {
  14. if (resource.equals(resource1)) {
  15. System.out.println("Thread 1 acquired resource 1.");
  16. unlockResource(resource1);
  17. } else if (resource.equals(resource2))) {
  18. System.out.println("Thread 2 acquired resource 2.");
  19. unlockResource(resource2);
  20. } else {
  21. throw new IllegalArgumentException("Invalid resource to acquire.");
  22. }
  23. }
  24. // 线程释放资源
  25. private synchronized void unlockResource(Object resource) {
  26. System.out.println("Thread released resource " + resource + ".");
  27. }
  28. public static void main(String[] args) {
  29. DeadlockExample deadlockExample = new DeadlockExample();
  30. deadlockExample.startThreads();
  31. }
  32. }

在这个例子中,线程1需要资源1才能继续执行,而线程2需要资源2。当两个线程都试图获取对方的资源时,就会发生死锁。

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

发表评论

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

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

相关阅读