Java多线程问题:死锁实例

原创 àì夳堔傛蜴生んèń 2024-09-05 21:27 236阅读 0赞

死锁是多线程编程中的一种严重问题,它发生在两个或更多线程相互等待对方释放资源的情况下,无法继续执行。

下面是一个简单的死锁实例,使用Java的Thread类:

  1. public class DeadLockExample {
  2. private Object resource1 = new Object();
  3. private Object resource2 = new Object();
  4. // 创建两个线程,分别获取资源1和资源2
  5. Thread thread1 = new Thread(() -> lockResource(resource1, resource2))));
  6. Thread thread2 = new Thread(() -> lockResource(resource2, resource1))));
  7. public void run() {
  8. try {
  9. thread1.start();
  10. thread2.start();
  11. // 等待所有线程执行完毕
  12. thread1.join();
  13. thread2.join();
  14. } catch (InterruptedException e) {
  15. e.printStackTrace();
  16. }
  17. }
  18. // 用于模拟获取资源的逻辑
  19. private void lockResource(Object resource1, Object resource2) {
  20. try {
  21. // 模拟资源的获取,如果无法获取则抛出异常
  22. if (resource1 != null && !resource1.equals(resource2)) {
  23. throw new RuntimeException("资源竞争失败");
  24. }
  25. // 模拟成功获取资源后释放资源
  26. System.out.println("成功获取资源 " + resource1);
  27. } catch (Exception e) {
  28. System.out.println("获取资源时发生错误:" + e.getMessage());
  29. }
  30. }
  31. }

在这个例子中,线程1试图获取resource1和resource2中的一个是,同时线程2也试图获取同样的两个资源。这就形成了一个死锁,因为每个线程都在等待对方释放资源。

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

发表评论

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

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

相关阅读

    相关 Java线同步问题实例

    死锁是多线程编程中常见的问题,当两个或更多的线程因争夺资源而造成的一种互相等待的现象称为死锁。 下面是一个简单的Java多线程同步死锁问题实例: ```java // 定义

    相关 Java线问题实例

    死锁是多线程编程中的一种严重问题。当两个或更多的线程因争夺资源而造成的一种互相等待的现象时,就会出现死锁。 以下是一个简单的Java死锁实例: ```java // 创建两