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