扫码阅读
手机扫码阅读

深入理解并发编程中的三个问题

239 2024-07-18

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

查看原文:深入理解并发编程中的三个问题
文章来源:
springboot葵花宝典
扫码关注公众号

深入理解并发编程中的三个问题

1. 可见性

可见性(Visibility):是指一个线程对共享变量进行修改时,另一个线程能立即得到修改后的最新值。

1.1 可见性案例演示

通过代码案例演示可见性问题:一个线程根据 boolean 类型的标记变量 flag 进行循环,另一个线程改变此变量的值。由于可见性问题,另一个线程未能立即感知变量的变化。

例如,线程1基于变量 run=true 输出消息,线程2将 run 设置为 false 后,线程1仍然继续循环,直到某时才停止。这表明线程对共享变量的修改未能及时被其他线程看到。

总结:并发编程中可能出现可见性问题,当一个线程对共享变量进行了修改,其他线程未能立即读取到最新值。

2. 原子性

原子性(Atomicity):指一次或多次操作要么全部执行且不被干扰,要么完全不执行。

2.1 原子性案例演示

案例展示了多个线程同时对共享变量进行累加操作时的原子性问题。代码中,5个线程各执行1000次 i++,期望最终结果为5000,但由于累加操作非原子性,实际结果可能小于5000。

这说明在多线程环境下,未经保护的共享变量操作可能导致数据不一致。

总结:对于共享变量的修改操作,若不保证原子性,会出现数据竞争和结果不准确的问题。

想要了解更多内容?

查看原文:深入理解并发编程中的三个问题
文章来源:
springboot葵花宝典
扫码关注公众号