脏读

  /**
 * @Description TODO
 * @Author "zhouhai"
 * @Date2018/10/717:56
 **/
public class DirtyRead {

    private String username = "zhouhai";
    private String password = "123";

    public synchronized void setValue(String username, String password) {
        this.username = username;

        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        this.password = password;

        System.out.println("setValue最终结果:username = "+username+",password="+password);
    }

    public   void getValue() {
        System.out.println("getValue方法得到:username = "+this.username+",password="+this.password);
    }


    public static void main(String[] args) {
        final DirtyRead dr = new DirtyRead();

        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                dr.setValue("周海", "zhouhai");
            }
        });

        t1.start();

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        dr.getValue();

    }

}


结果如下:

getValue方法得到:username = 周海,password=123
setValue最终结果:username = 周海,password=zhouhai

可以在getvalue()方法上加同步锁,保持业务与数据的一致性!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容