java多线程学习之路-不能理解

发布时间 2023-11-24 18:13:31作者: LQ996
 1 import java.util.concurrent.CountDownLatch;
 2 
 3 /**
 4  * 颠覆理解的,为什么不会出问题,执行多次,结果都是正确,并且一致
 5  */
 6 class MyData {
 7     int a = 5;//可预定总座位数
 8     int b = 0;//已预定座位数
 9 
10     public void yd() {
11         if (b < a) {
12             b++;
13             System.out.println("预定成功");
14         }
15     }
16 }
17 
18 public class Demo {
19 
20     public static void main(String[] args) throws InterruptedException {
21 
22         MyData myData = new MyData();
23         System.out.println(myData.b);
24 
25 //        CountDownLatch countDownLatch = new CountDownLatch(20);
26         for (int i = 0; i < 20; i++) {
27             new Thread(() -> {
28                 for (int j = 0; j < 10000; j++) {
29                     myData.yd();
30                 }
31 //                countDownLatch.countDown();
32             }).start();
33         }
34 //        countDownLatch.await();
35         while (Thread.activeCount() > 2) {
36             Thread.yield();
37         }
38         System.out.println(myData.b);
39     }
40 
41 }

 

我指定了一个资源类,并且创建20个线程操作同一个资源,没有加锁,也没有使用原子类,为什么每次执行的结果正确并且一致,和我平时理解的多线程不一样
希望看到这篇博客的高手给予我帮助