您的位置:首页 > 编程语言 > Java开发

探索,java线程中使用局部变量:局部变量必须声明为final

2018-03-01 10:35 621 查看

java内部类访问局部变量时局部变量必须声明为final,同样,在线程中使用局部变量时,需将局部变量声明为final。

public class Thread2 {

private static int num = 0;

public static synchronized void printNum(String tag){
try {
if(tag.equals("a")){
num = 100;
System.out.println("tag a ,set num over");
}else {
num = 200;
System.out.println("tag b ,set num over");
}
System.out.println("tag"+tag + "num:"+num);
}catch (Exception e){
e.printStackTrace();
}

}

public static void main(String[] args) {

//两个不同对象
final Thread2 m1 = new Thread2();
final Thread2 m2 = new Thread2();

Thread t1 = new Thread(new Runnable() {
public void run() {
m1.printNum("a");
}
});

Thread t2 = new Thread(new Runnable() {
public void run() {
m2.printNum("b");
}
});

t1.start();
t2.start();

}
}


原因:

编译这个类后发现产生了3个class文件,编译后的内部类的构造方法的里面,传了对应的外部类的引用和所有局部变量的形参。

由于这些工作是在编译时进行的,JAVA虚拟机并没有什么所谓的内部类的概念,在JAVA虚拟机看来,该内部类和外部类是两个独立的class文件。

final关键字的目的就是为了保证内部类和外部函数对变量“认识”的一致性
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java
相关文章推荐