关于内存池的学习
关于volatile
这个是一个类型修饰符,用于内存级别的修饰,我对它的理解为: 在用这个修饰符之后,更新的内容可以及时被其他线程看到,但是这并非线程安全。 为什么这么说呢,在书本《深入理解Java虚拟机》中有描述,在一个多线程的轮流给总数 +1 的情况,10个线程每个都++100次,按理论来说最后总数应该是10*100=1000,但是具体执行后会返现总数会变化,但是一直不回到达1000,造成一个问题的原因是,被volatile修饰变量(计算总数),虽然可以被及时看到,但是另一个线程使用的还是旧的数据,就导致线程A在执行的时候只能保证执行的那一刻数据是对的,但是在之后的 +1 的时候,数据已经被另外的线程B或者C执行过了,这时候拿到的数据已经是老的数据了,所以修改的还是老数据。在这里就可以这个volatile并非线程安全。 在一个线程执行 +1 操作的时候有一下步骤,读取count count++ 写回count++ ,这时候线程A和线程B都是有操作的,这个数据就可以遇到 少加的情况。
评论
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
