匿名内部类 线程外变量为什么需要final修饰
作者:互联网
一切的一切 要从上周说起。
不,应该是月初,甚至更早。
同时G某早有传言,不是本地人不说女友还是异地。来公司一两年后还是有了要走的想法,同事间有相熟之人确有谈论为面试做准备,结合G某进场上班接电话外出,很久才回来。 小年轻相信了这句话,且围绕着这件事考虑这个人。
要不说小年轻终究是小年轻,这种没有见微知著的能力却会饭一叶障目的错,描述的不就是像小年轻一样的人吗?
话说上周,G某五天时间只有一两天来上班,本来小年轻自己的世界就够乱了,哪有心思关注别人。耐不住年轻人也是凡人,听同事说起才发现确实是好几天没来上班。
渐渐的听到风声说感冒生病了,摩天G某来上班,有人问身上的药味,到了周四听领导说让关系好的同事带G某去医院检查一下,以免出现问题。 事已至此,小年轻不但没有考虑同事的身体抱恙,还应了鲁迅的那就话,恶意揣测G 某是否以此为借口来准备面试。
papapa打脸的永远是事实,这周一,与G某交好的同事也没来上班,领导打电话问候时小年轻八卦的心关注了下,才知道 年纪不大的G某腰间盘凸出。 领导对所有人一番提示并催促大家下班去运动。
摸了摸小年轻的老腰,不禁感叹,脑子不好使,身体也不行 这可咋整?
下面进入附带环节:
话说最近一段时间,小年轻决定学习一下多线程,谁曾想初出茅庐及遇阻
话不多说先上图
idea提示的英文主要表达了以下意思:
变量“t”是从内部类中访问的,需要声明为final
翻译成凡人的语言就是 匿名内部类中的对象需要用final来修饰
经过一番度娘学习打法后,明白了 。
小年轻使用的是jdk1.7 而jdk1.8开始有了 大的变化 其中就包括:
在JDK8之前,如果我们在匿名内部类中需要访问局部变量,那么这个局部变量必须用final修饰符修饰。
在JDK8中如果我们在匿名内部类中需要访问局部变量,那么这个局部变量不需要用final修饰符修饰。
但是其实底层编译还是给加了final 图啥呢????
最后一句非常的重要,抛开匿名内部类
但是线程外的变量为什么要使用final修饰呢?
接下来就到了胡说八道的时间了 =============================
这里涉及到生命周期的问题 final关键字在并发中的应用
首先 随着科技的进步 cpu从单核变多核了 如果是多核cpu 会存在多核访问同一个对象的问题 造成数据不一致
此时使用final关键字则可以禁止cpu指令集重新排序 保证对象的在当前线程未完成就被其他线程使用。
所以如果不使用用final来修饰变量t 那么当mian函数结束后 其实 t 线程并没有结束 如果有另一个线程来访问 t 那么此时t 中 的值是不符合需求的
标签:年轻,匿名,线程,修饰,final,类中 来源: https://blog.csdn.net/sinat_40129484/article/details/115860738