- 博客(28)
- 资源 (12)
- 收藏
- 关注
原创 【并发编程】快速失败和安全失败
由于修改时对原有集合进行了拷贝,而迭代器遍历的是原有集合,所以在遍历过程中发生的修改并不能被迭代器检测到,所以不会触发 ConcurrentModificationException。基于拷贝内容的优点是避免了 Concurrent Modification Exception,但同样地,迭代器并不能实时地访问到修改后的内容,需要修改完成并覆盖之后才能看到新的内容。场景:java.util 包下的集合类都是快速失败的,不能在多线程下并发修改,或者迭代过程中使用集合的方法修改,这里的修改指的是结构性变更。
2023-03-15 10:40:12 116
原创 【并发编程】volatile 是如何保证可见性的
但是 cpu 是不会直接操作内存的,每个 cpu 都会有自己的缓存,操作缓存的速度比操作主存更快。问题就出现在第二步,因为每个 CPU 操作的是各自的缓存,所以不同的 CPU 之间是无法感知其他CPU 对这个变量的修改的,最终就可能导致结果与我们的预期不符。在这种情况下,不同的 CPU 之间就可以感知其他 CPU 对变量的修改,并重新从内存中加载更新后的值,因此可以解决可见性问题。在单核 cpu 的情况下,是不存在可见性问题的,如果是多核 cpu,可见性问题就会暴露出来。各自将修改后的值刷新到主存中。
2023-03-15 10:21:18 370
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人