我尝试按线程更新列表中的值,
但它不适合我。
以下是我的代码,请指出我错了。
感谢。
// List of Integer values
public static volatile ArrayList<Integer> intList = new ArrayList<Integer>();
public static void main(String... args) {
intList.add(11);
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
// Loop and increase value of a list of integer
while (true) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (this) {
for (Integer item : intList) {
System.out.print("thread 1: " + item);
item++; //increase value
System.out.print(" -> " + item + "\n");
}
}
}
}
});
thread1.start();
}
输出:
主题1:11 - &gt; 12 的
主题1:11 - &gt; 12 的
主题1:11 - &gt; 12 的
主题1:11 - &gt; 12 的
主题1:11 - &gt; 12 的
=&GT;循环开始时,值不会改变,每次循环开始时它仍然是11。
怎么了?
答案 0 :(得分:4)
问题在于这行代码:
item++; //increase value
JVM正在对对象项应用自动装箱,创建一个int原始值,将其加1,然后创建一个新的整数对象。因此,您不会修改列表中的对象。