Java多线程并发编程:死锁示例

原创 ゝ一世哀愁。 2024-09-06 01:51 215阅读 0赞

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

以下是一个简单的Java多线程死锁示例:

  1. // 创建两个共享资源的类
  2. class Resource {
  3. int count = 10;
  4. // 提供获取和减少计数的方法
  5. public synchronized int getCount() {
  6. return count;
  7. }
  8. public synchronized void decreaseCount() {
  9. count--;
  10. }
  11. }
  12. // 定义两个线程,每个线程都会尝试增加资源的计数
  13. class WorkerThread extends Thread {
  14. private Resource resource;
  15. // 创建新线程时传入共享资源
  16. public WorkerThread(Resource resource) {
  17. this.resource = resource;
  18. }
  19. @Override
  20. public void run() {
  21. while (true) {
  22. try {
  23. // 线程试图获取资源的当前计数
  24. int count = resource.getCount();
  25. if (count == 0) { // 资源可用
  26. resource.decreaseCount(); // 减少计数以表示已使用
  27. System.out.println("Thread " + this.getName() + " acquired resource of count: " + count);
  28. break; // 线程不再循环,退出run方法
  29. }
  30. } catch (InterruptedException e) {
  31. e.printStackTrace();
  32. }
  33. }
  34. }
  35. }
  36. public class Main {
  37. public static void main(String[] args) {
  38. Resource resource = new Resource();
  39. WorkerThread worker1 = new WorkerThread(resource);
  40. WorkerThread worker2 = new WorkerThread(resource);
  41. // 启动两个线程
  42. worker1.start();
  43. worker2.start();
  44. }
  45. }

在这个例子中,两个线程(worker1和worker2)同时尝试获取一个资源的计数。由于资源有限(初始计数为10),如果一个线程正在使用资源(计数不为0),另一个线程就无法再获取这个资源。

当这种情况持续时,就会发生死锁。在这个示例中,如果线程worker2首先开始,然后worker1开始,系统将陷入死锁状态。

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

发表评论

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

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

相关阅读

    相关 Java线编程示例

    死锁是多线程编程中的一种严重问题,当两个或更多线程因争夺资源而造成的一种互相等待的现象时,就会出现死锁。 以下是一个简单的Java死锁示例,使用了两个共享资源(resourc

    相关 Java线编程示例

    在Java多线程编程中,死锁是一种常见的并发问题。当两个或更多的线程互相等待对方释放资源时,就形成了死锁。 以下是一个简单的Java死锁示例: ```java // 创建两