学妹问我,并发问题的根源到底是什么?
共 12988字,需浏览 26分钟
·
2021-07-04 09:34
1.1、原子性问题的产生的原因
1.2、案例分析
public class AtomicDemo {
private int count = 0;
public void add() {
count++;
}
public int get() {
return count;
}
public static void main(String[] args) throws InterruptedException {
CountDownLatch countDownLatch = new CountDownLatch(100);
AtomicDemo atomicDemo = new AtomicDemo();
IntStream.rangeClosed(0, 100).forEach(item -> {
new Thread(() -> {
IntStream.rangeClosed(1, 100).forEach(i -> {
atomicDemo.add();
});
}).start();
countDownLatch.countDown();
});
countDownLatch.await();
System.out.println(atomicDemo.get());
}
}
2.1、可见性问题产生的原因
2.2、案例分析
public class AtomicDemo {
private int count = 0;
public void add() {
count++;
}
public int get() {
return count;
}
public static void main(String[] args) throws InterruptedException {
CountDownLatch countDownLatch = new CountDownLatch(100);
AtomicDemo atomicDemo = new AtomicDemo();
IntStream.rangeClosed(0, 100).forEach(item -> {
new Thread(() -> {
IntStream.rangeClosed(1, 100).forEach(i -> {
atomicDemo.add();
});
}).start();
countDownLatch.countDown();
});
countDownLatch.await();
System.out.println(atomicDemo.get());
}
}
3.1、有序性问题产生的原因
int a = 1;int b =4
;从表面和常规角度来看,程序的执行应该是先初始化 a ,然后初始化 b 。但是实际上非常有可能是先初始化 b,然后初始化 a。因为在编译器看了来,先初始化谁对这两个变量不会有任何影响。即这两个变量之间没有任何的数据依赖。
3.2、案例分析
public class SingletonDclDemo {
private SingletonDclDemo(){}
private static SingletonDclDemo instance;
public static SingletonDclDemo getInstance(){
if (Objects.isNull(instance)) {
synchronized (SingletonDclDemo.class) {
if (Objects.isNull(instance)) {
instance = new SingletonDclDemo();
}
}
}
return instance;
}
public static void main(String[] args) {
IntStream.rangeClosed(0,100).forEach(item->{
new Thread(SingletonDclDemo::getInstance).start();
});
}
}
instance = new SingletonDclDemo();
创建对象的代码,分为三步:① 分配内存空间;② 初始化对象SingletonDclDemo;③ 将内存空间的地址赋值给instance;
最近有很多人问,有没有读者交流群,想知道怎么加入。
最近我创建了一些群,大家可以加入。交流群都是免费的,只需要大家加入之后不要随便发广告,多多交流技术就好了。
目前创建了多个交流群,全国交流群、北上广杭深等各地区交流群、面试交流群、资源共享群等。
有兴趣入群的同学,可长按扫描下方二维码,一定要备注:全国 Or 城市 Or 面试 Or 资源,根据格式备注,可更快被通过且邀请进群。
往期推荐
终于有人说清楚了!"内卷"和"努力"到底有啥区别?
一个 bug ,罚款 200,我真待过这样的公司
双非院校非科班的学弟,刚刚拿到了腾讯、网易、美团等大厂Offer