インスタンス変数は安全ではありません(java)

1108 ワード

インスタンス変数はオブジェクトインスタンスプライベートであり、java仮想マシンのスタックに割り当てられ、システムにこのオブジェクトのインスタンスが1つしか存在しない場合、マルチスレッド環境では静的変数のように、あるスレッドによって修正された後、他のスレッドは修正に対してすべて表示されるため、スレッドは安全ではない.各スレッドが異なるオブジェクトで実行されている場合、オブジェクトとオブジェクト間のインスタンス変数の変更は互いに影響しないため、スレッドは安全です.(参考:http://hnwsha.blog.sohu.com/236276313.html)
package util;  
/** 
 * @          
 */  
public class Test {  
    public static void main(String[] args) {  
        Runnable accumelatora = new Accumulatort();  
        Thread threada = new Thread(accumelatora, "ThreadA");  
        Thread threadb = new Thread(accumelatora, "ThreadB");  
        threada.start();  
        threadb.start();  
    }  
}  
class Accumulatort implements Runnable {  
    //       
    int locals = 0;  
    public void run() {  
        for (int i = 0; i <= 10; i++) {  
            locals += 1;  
            try {  
                Thread.sleep(1000);  
            } catch (Exception e) {  
            }  
            System.out.println(Thread.currentThread().getName() + "-->"  
                    + locals);  
        }  
    }  
}