采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师你好,对于cas算法,如果var1对象的变量var2和从主内存中读取出来的var5不一样的话,系统里面会进行什么操作,更新var1对象还是说直接把主内存里面的东西全部读取到工作内存?还是怎么样?
你好,compareAndSwapInt是cas的核心,这个方法里传入的参数包含了 当前工作线程的值、更新后的值。执行这个方法时,其实是调用cpu的一条指令去执行的,当这条cpu指令执行时,会校验主存里的最新值和当前工作线程里的值是否相同,如果相同,则更新为目标值,返回true,不同的话不更新且返回false。这一次到这里就执行完了。如此,可以看出一次cas执行并不一定能完成更新,因此这里引入了while循环。返回false时,则通过getIntVolatile方法(相当于使用了volatile关键字)来获取最新主存的值,更新传入cas中的参数:当前工作线程最新值、调整后更新值。继续执行compareAndSwapInt,如果返回false则不断更新当前工作线程值和调整后更新的值(说明此时并发修改这个值的线程很多),直到返回true,这时更新成功。
老师,按照您课程上的逻辑,不是说线程在处理对象的时候,会将对象的副本拷贝到线程所在的工作内存,那么,是不是cas返回为false的时候,线程工作内存里面的对象会进行更新。
是的,那里的循环就是不断取出主存里的最新的值更新到当前工作线程的副本里,继续尝试,直到尝试成功。
恩恩明白了,谢谢老师!
登录后可查看更多问答,登录/注册
构建完整并发与高并发知识体系,倍增高薪面试成功率!
1.7k 1
1.1k 18
1.2k 15
3.6k 12
1.2k 12