我有一个匿名类,它从集合中获取迭代值,如下所示。使用此代码,是否在匿名类中保留了立即变量in
?或者不同的线程可以采用相同的in
值?
List<Integer> list = new ArrayList<>();
for (int i = 1; i <= 20; i++)
list.add(i);
for (final Integer in : list) {
new Thread(new Runnable() {
@Override
public void run() {
Thread.sleep(1000);
System.out.println(value + "," + in);
}
}).start();
}
答案 0 :(得分:3)
是的,in
的每个值都保留在每个创建的Thread
中。只要声明为final
,或者如果您正在使34; (不是final
但未更改)。
答案 1 :(得分:0)
您不能将变量作为最终变量并为其赋予新值。 final意味着:价值是不可改变的,也是最终的。
由于它是最终的,Java可以安全地将其复制到本地匿名类