解决方案 »

  1.   

    共享的话,带上static应该可以实现:class HolderThread extends Thread {
        private static int n;
        
        public HolderThread(int n) { this.n = n;}
        
        public void assertSanity(int n) {
            System.out.println(Thread.currentThread().getName() + " n: " + n);
            if(this.n != n)
                throw new AssertionError("This statement is false");
        }
        
        public void run() {
            this.assertSanity(n);
        }
    }public class Holder {
        public static void main(String[] args) {
            double foo = Math.PI; 
            for(int i = 0 ; i < 100; i++) {
                new HolderThread(i).start();
                for (int j=0; j<10000; j++) {
                    foo += 1.0/foo;
                }
            }
        }
    }另外,方法还加了一个入参,这个入参也是n本身,这样产生一个传递的过程,就可能出现那种现象了。
    (也许不加也会有,只是现在机器性能太好了,可能体现不出来)