Java多线程:资源竞争示例

原创 旧城等待, 2024-11-14 17:45 101阅读 0赞

在Java多线程中,资源竞争是一个常见的问题。简单来说,就是多个线程同时争夺有限的资源,如果没有适当的同步机制,可能会导致数据不一致或者死锁等问题。

以下是一个经典的资源共享问题示例:

  1. class Resource {
  2. private int count = 0;
  3. public synchronized void acquire() {
  4. count++;
  5. }
  6. public synchronized void release() {
  7. if (count > 0) {
  8. count--;
  9. } else {
  10. // This should never happen, but just in case...
  11. throw new RuntimeException("Resource released when not acquired");
  12. }
  13. }
  14. }
  15. public class Main {
  16. private Resource resource;
  17. public Main() {
  18. resource = new Resource();
  19. }
  20. public synchronized void acquireResource() {
  21. resource.acquire();
  22. }
  23. public synchronized void releaseResource() {
  24. resource.release();
  25. }
  26. public static void main(String[] args) {
  27. Main main = new Main();
  28. // 多线程竞争资源
  29. Thread thread1 = new Thread(() -> {
  30. for (int i = 0; i < 5; i++) {
  31. main.acquireResource(); // 线程1尝试获取资源
  32. try {
  33. Thread.sleep(100); // 模拟操作耗时
  34. } catch (InterruptedException e) {
  35. e.printStackTrace();
  36. }
  37. main.releaseResource(); // 线程1释放资源
  38. }
  39. }));
  40. Thread thread2 = new Thread(() -> {
  41. for (int i = 0; i < 5; i++) {
  42. main.acquireResource(); // 线程2尝试获取资源
  43. try {
  44. Thread.sleep(100); // 模拟操作耗时
  45. } catch (InterruptedException e) {
  46. e.printStackTrace();
  47. }
  48. main.releaseResource(); // 线程2释放资源
  49. }
  50. }));
  51. thread1.start();
  52. thread2.start();
  53. // 主线程等待所有子线程执行完毕
  54. try {
  55. thread1.join();
  56. thread2.join();
  57. } catch (InterruptedException e) {
  58. e.printStackTrace();
  59. }
  60. System.out.println("资源释放完成!");
  61. }
  62. }

在这个示例中,Resource 类代表一个共享资源。两个子线程(thread1thread2)交替尝试获取和释放资源。

如果资源管理不当,可能会导致资源耗尽或者数据不一致等问题。

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

发表评论

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

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

相关阅读

    相关 Java线资源竞争示例

    在Java多线程中,资源竞争是一个常见的问题。简单来说,就是多个线程同时争夺有限的资源,如果没有适当的同步机制,可能会导致数据不一致或者死锁等问题。 以下是一个经典的资源共享