Java多线程编程:死锁问题实例

原创 秒速五厘米 2024-10-22 04:15 153阅读 0赞

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

下面是一个简单的Java多线程死锁实例:

  1. // 定义资源
  2. class Resource {
  3. private int count;
  4. Resource(int count) {
  5. this.count = count;
  6. }
  7. synchronized void acquire() {
  8. if (count == 0) {
  9. throw new InterruptedException("资源已耗尽");
  10. }
  11. count--;
  12. }
  13. synchronized void release() {
  14. count++;
  15. }
  16. }
  17. // 定义线程
  18. class ThreadA extends Thread {
  19. private Resource resource;
  20. ThreadA(Resource resource) {
  21. this.resource = resource;
  22. }
  23. public void run() {
  24. try {
  25. // 资源1
  26. resource.acquire();
  27. System.out.println("Thread A acquired resource 1");
  28. // 资源2
  29. resource.acquire();
  30. System.out.println("Thread A acquired resource 2");
  31. // 释放资源
  32. resource.release();
  33. } catch (InterruptedException e) {
  34. e.printStackTrace();
  35. }
  36. }
  37. }
  38. public class Main {
  39. public static void main(String[] args) {
  40. Resource resource1 = new Resource(1);
  41. Resource resource2 = new Resource(1);
  42. ThreadA threadA1 = new ThreadA(resource1);
  43. ThreadA threadA2 = new ThreadA(resource2);
  44. threadA1.start();
  45. threadA2.start();
  46. }
  47. }

在这个例子中,资源1和资源2分别被线程A1和线程A2请求。如果两个线程同时获取资源,就可能导致死锁现象。在正确的执行顺序下,是不会发生死锁的。

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

发表评论

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

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

相关阅读

    相关 Java线并发编程实例

    在Java多线程并发编程中,死锁是一个常见的问题。简单来说,死锁是指两个或多个线程互相等待对方释放资源,导致它们都无法继续执行的状况。 下面是一个经典的死锁实例: ```j

    相关 Java线问题实例

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