列表中的值不会被线程更新

时间:2015-03-03 09:48:46

标签: java multithreading

我尝试按线程更新列表中的值,
但它不适合我。
以下是我的代码,请指出我错了。 感谢。

// 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。
怎么了?

1 个答案:

答案 0 :(得分:4)

问题在于这行代码:

item++; //increase value

JVM正在对对象项应用自动装箱,创建一个int原始值,将其加1,然后创建一个新的整数对象。因此,您不会修改列表中的对象。