线程同步之脏读问题_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 线程同步之脏读问题

线程同步之脏读问题

 2018/9/10 1:00:18  gwzan  程序员俱乐部  我要评论(0)
  • 摘要:线程同步,要确保业务完整性(原子性),多个方法都要使用synchronized,否则会出现脏读问题demo:packagecom.zan;/***保持业务整体完整,都要使用synchronized,来确保原子性*/publicclassDirtyRead{privateStringusername="lisi";privateStringpassword="123456";publicsynchronizedvoidsetValue(Stringusername,Stringpassword)
  • 标签:问题 线程 同步
  • 线程同步,要确保业务完整性(原子性),多个方法都要使用synchronized,否则会出现脏读问题

? 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();
	}
	
	
	
}

?

上一篇: 线程之对象锁的同步异步问题 下一篇: 没有下一篇了!
发表评论
用户名: 匿名