? demo:
?
??
class="java">package com.zan; /** * 保持业务整体完整,都要使用synchronized,来确保原子性 */ public class DirtyRead { private String username = "lisi"; private String password = "123456"; public synchronized void setValue(String username, String password){ this.username = username; try { Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } this.password = password; System.out.println("setValue的值username = " + username + " , password = " + password); } //加synchronized ,确保在设值过程中,不会出现脏读。即要设值后才能去读 public synchronized 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("wangwu", "new123456"); } }); t1.start(); Thread.sleep(1000); dr.getValue(); } }
?