Loading

随笔分类 -  Java并发入门

摘要:原子性问题的源头是线程切换 Q:如果禁用 CPU 线程切换是不是就解决这个问题了? A:单核 CPU 可行,但到了多核 CPU 的时候,有可能是不同的核在处理同一个变量,即便不切换线程,也有问题。 所以,解决原子性的关键是「同一时刻只有一个线程处理该变量,也被称为互斥」。 如何做到呢?用「锁」。 阅读全文
posted @ 2022-12-02 22:33 大数据王小皮 阅读(138) 评论(0) 推荐(0)
摘要:如何解决其中的可见性和有序性导致的问题,这也就引出来了今天的主角——Java 内存模型。 一、什么是 Java 内存模型? 导致可见性的原因是缓存,导致有序性的原因是编译优化,那解决可见性、有序性最直接的办法就是禁用缓存和编译优化,但这样虽然解决了问题,但也导致带来的性能优化都没了。 因此,解决方案 阅读全文
posted @ 2022-11-30 23:42 大数据王小皮 阅读(302) 评论(2) 推荐(0)
摘要:并发编程Bug的源头:可见性、原子性和有序性问题。 「CPU、内存、磁盘之间的速度差异」 - 为了能同时执行多个任务,CPU 发展出时间片轮转、多核等 - CPU 要从内存中读数据太慢了,所以给自己设置了缓存 - CPU 读磁盘更慢了,所以可以让该线程阻塞 阅读全文
posted @ 2022-11-28 19:01 大数据王小皮 阅读(126) 评论(0) 推荐(0)