编辑代码

public class Data {
    //数据版本号
    static int version = 1;
    //真实数据
    static String data = "java的架构师技术栈";
    public static int getVersion(){
        return version;
    }
    public static void updateVersion(){
        version = version + 1;
    }
}

public class OptimThread extends Thread { 
    public int version;
    public String data;
    //构造方法和getter、setter方法
    public void run() {
        // 1.读数据
        String text = Data.data;
        println("线程"+ getName() + ",获得的数据版本号为:" + Data.getVersion());
        println("线程"+ getName() + ",预期的数据版本号为:" + getVersion());
        System.out.println("线程"+ getName()+"读数据完成=========data = " + text);
        // 2.写数据:预期的版本号和数据版本号一致,那就更新
        if(Data.getVersion() == getVersion()){
            println("线程" + getName() + ",版本号为:" + version + ",正在操作数据");
            synchronized(OptimThread.class){
                if(Data.getVersion() == this.version){
                    Data.data = this.data;
                    Data.updateVersion();
                    System.out.println("线程" + getName() + "写数据完成=========data = " + this.data);
                    return ;
                }
            }
           
        }else{
             // 3. 版本号不正确的线程,需要重新读取,重新执行
            println("线程"+ getName() + ",获得的数据版本号为:" + Data.getVersion());
            println("线程"+ getName() + ",预期的版本号为:" + getVersion());
            System.err.println("线程"+ getName() + ",需要重新执行。==============");
        }  
    }
}

public class Test {
    public static void main(String[] args) {
        for (int i = 1; i <= 2; i++) {
            new OptimThread(String.valueOf(i), 1, "fdd").start();
        }
    }
}