想用代码演示出并发的有序性问题,代码如下
public class ConCurrentTest {
public static void main(String[] args) {
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(2);
ExecutorService executorService = Executors.newFixedThreadPool(2);
scheduledExecutorService.scheduleWithFixedDelay(()->{
try {
MyTest mt = new MyTest();
CountDownLatch cd = new CountDownLatch(1);
CountDownLatch cd1 = new CountDownLatch(2);
executorService.execute(() -> {
try {
cd.await();
mt.test1();
cd1.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
});
executorService.execute(() -> {
try {
cd.await();
mt.test2();
cd1.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
});
cd.countDown();
cd1.await();
if (mt.getC() == 0) {
System.out.println("a="+mt.getA());
System.out.println("b="+mt.getB());
System.out.println("c="+mt.getC());
}
} catch (Exception e) {
e.printStackTrace();
}
}, 1, 1, TimeUnit.SECONDS);
}
}
class MyTest {
private int a = 0;
private boolean b = false;
private int c = 0;
public void test1(){
a = 1;
b = true;
}
public void test2(){
while (!b);
c = a;
}
public int getA() {
return a;
}
public boolean getB() {
return b;
}
public int getC() {
return c;
}
}
正常情况自然是a=1, c=1;
但应该也会出现a=1,c=0;的情况呀,我这始终没出现预期效果