课程
/后端开发
/Java
/细说Java多线程之内存可见性
为什么VolatileDemo要加final修饰?
2016-05-23
源自:细说Java多线程之内存可见性 4-2
正在回答
因为生命周期的原因。方法中的局部变量,方法结束后这个变量就要释放掉,final保证这个变量始终指向一个对象。首先,内部类和外部类其实是处于同一个级别,内部类不会因为定义在方法中就会随着方法的执行完毕而跟随者被销毁。问题就来了,如果外部类的方法中的变量不定义final,那么当外部类方法执行完毕的时候,这个局部变量肯定也就被GC了,然而内部类的某个方法还没有执行完,这个时候他所引用的外部变量已经找不到了。如果定义为final,Java会将这个变量复制一份作为成员变量内置于内部类中,这样的话,由于final所修饰的值始终无法改变,所以这个变量所指向的内存区域就不会变。
柠檬酱c
客气,共同学习么。。、
懂了,谢谢大神! ^_^
举报
用两种方式实现内存可见性,代领大家深层次学习Java中的内存
2 回答java多线程中共享变量是不是一定要private修饰?
9 回答不是说volatile不保证原子性吗?为什么对于64位类型的变量用volatile修饰?
2 回答final的作用
1 回答volatile 加不加线程都可以访问啊,这是为什么?
5 回答被synchronized修饰,依然出现两种结果0和6,是我代码写得有问题?
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号