简单银行存款项目练习多线程安全问题解决方式——同步

package practiceMySelf;
/**需求:
 * 银行有一个金库
 * 有连个储户分别存300元,每次存100,存3次
 * 
 * 目的:改程序是否有安全问题,如果有,如何解决?
 * 如何找问题:
 * 1、明确哪些代码是多线程运行代码
 * 2、明确共享数据
 * 3、明确多线程运行代码块中哪些语句是操作共享数据的
 * */
 class Bank {
	private int sum;
	Object obj=new Object();
	//方法二
	public synchronized void add(int n){
		//共享数据要加锁
		//方法一
		//synchronized(obj){
			sum+=n;
			try{Thread.sleep(20);}catch(Exception e){e.printStackTrace();}
			System.out.println("sum="+sum);
		//}
	}
	
}
class Cus implements Runnable{
	private Bank b=new Bank();
	@Override
	public void run() {
		for(int x=0;x<3;x++){
			b.add(100);
		}
	}
}
class BankDemo{
	public static void main(String[] args){
		Cus c=new Cus();
		Thread t1=new Thread(c);
		Thread t2=new Thread(c);
		t1.start();
		t2.start();
	}
}

猜你喜欢

转载自blog.csdn.net/zxllynu/article/details/79440594