zoukankan      html  css  js  c++  java
  • 脏读

    /**
     * 业务整体需要使用完整的synchronized,保持业务的原子性。
     *
     */
    public class DirtyRead {
    
        private String username = "name1";
        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) throws Exception{
            
            final DirtyRead dr = new DirtyRead();
            Thread t1 = new Thread(new Runnable() {
                @Override
                public void run() {
                    dr.setValue("name2", "456");        
                }
            });
            t1.start();
            Thread.sleep(1000);
            
            dr.getValue();
        }
    }

    上述的代码会发生脏读的问题,解决的办法是在setValue的方法上加synchronized关键字

    读取和设置的数据必须保证是一致的。

    这和数据库的一致性原理是一样的。

  • 相关阅读:
    【转载】C++汇编器、连接器
    【转载】vi的使用命令
    JDK,SDK,JRE概念
    iOS 使用xmpp做聊天客户端
    cocopods安装
    用XMPP实现完整Android聊天项目
    xmpp发送文件
    ember.js学习笔记
    html5 drag and drop
    jquery 数组深拷贝
  • 原文地址:https://www.cnblogs.com/dongdone/p/5709394.html
Copyright © 2011-2022 走看看