日期:2014-05-20  浏览次数:20890 次

谁能帮我解释关于线程安全的一句话
例如类有一个类变量,该类变量会被多个类方法读写,当多线程操作该类的实例对象时,如果线程对类变量有读取、写入操作就会发生类变量读写错误,即便是在类方法前加上synchronized也无效,因为同一个线程在两次调用方法之间时锁是被释放的,这时其它线程可以访问对象的类方法,读取或修改类变量。这种情况下可以将类变量放到ThreadLocal类型的对象中,使变量在每个线程中都有独立拷贝,不会出现一个线程读取变量时而被另一个线程修改的现象。

------解决方案--------------------
Java code

public class Test{
    public static void main(String[] args) throws Exception{

        Thread t1 = new Thread(new ThreadTest(10));
        t1.start();    
        Thread t2 = new Thread(new ThreadTest(20));
        t2.start();
        Thread t3 = new Thread(new ThreadTest(30));
        t3.start();
        Thread t4 = new Thread(new ThreadTest(40));
        t4.start();
        Thread t5 = new Thread(new ThreadTest(50));
        t5.start();
    }
}
class ThreadTest implements Runnable{
    public static int i = 0;
    
    public ThreadTest(int i){
        ThreadTest.setI(i);
    }

    public void run(){
        System.out.println(ThreadTest.getI());
    }

    public static int getI() {
        return i;
    }

    public static void setI(int i) {
        ThreadTest.i = i;
    }
}