例子:
public class DirtyRead { private String username="zhangdeheng"; private String password="123456"; 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 InterruptedException { final DirtyRead dr=new DirtyRead(); Thread t1=new Thread(new Runnable() { @Override public void run() { dr.setValue("zhangdh","123"); } }); t1.start(); Thread.sleep(1000); dr.getValue(); } }
运行结果
getValue方法结果,username=zhangdh,password=123456
setValue最终结果username=zhangdh,password=123
setValue最终结果username=zhangdh,password=123
产生脏读。