让我理解这个线程同步失败

时间:2015-12-02 12:37:59

标签: java multithreading

我会把它缩短。

鉴于此代码:

public class Test {

private static long counter = 1000000;

public static void main(String[] args) {

    T t = new T();

    t.start();

    while(counter >= 0){
        counter--;
        System.out.println(counter);
    }
    System.out.println(t.isAlive());    

}

private static class T extends Thread{

    @Override
    public void run() {

        while(counter > 0);

        System.out.println("end reached");



     }

   }    
 }

为什么以众神的名义不打印"结束了#34;?计数器下降到-1,t仍然存在。如果我减少计数器,它有时会起作用。

1 个答案:

答案 0 :(得分:2)

你需要制作计数器volatile。线程T使用本地副本。