关于原子类的问题

来源:7-4 本章总结_

宝慕林5249423

2019-12-30

老师讲什么是原子类时说:
1,不可分割;
2,一个操作是不可中断的,即便是多线程的情况下也可以保证;
但是cpu调度是按时间片来运行的,不同的时间片会运行不同的代码,怎么理解不可分割和不可中断的概念呢?我有点不理解,老师能否解释一下,谢谢!

写回答

1回答

悟空

2019-12-31

原子性分为两个层面,一个是微观层面,一个是宏观层面。

微观层面就是CPU指令不可分割,比如说一个CAS指令,它内部虽然有多个操作,但是由CPU可以保证这个指令的原子性。

第2个是宏观层面,宏观层面例如加了synchronized锁之后,就具备原子性,虽然在一个同步方法中有很多条语句,也肯定不是在同一个时间片内完成的,在执行期间呢,也肯定会被中断、被调度,但是无论怎么调度,都不可能出现执行到一半就退出的情景,也就是说,虽然我执行到一半,然后暂时被调度走了,但是我知道我还没有执行完毕,过一会还会继续回来执行我这个任务,尤其是,在此期间其他线程不能拿到这把锁来破坏我的原子性。

虽然原子类没有用锁,但是CAS的原子性保证了原子类的加操作具备原子性。


2
1
宝慕林5249423
非常感谢悟空老师!
2019-12-31
共1条回复

深度解密Java并发工具,精通JUC,成为并发多面手

JUC全方位讲解,构建并发工具类知识体系

1599 学习 · 573 问题

查看课程