package com.heima.duoxiancheng;
/*
* 本文件描述用多线程知识,
* 编写两个储户向银行账户存钱,
* 每次存100,共存6次。
* 说明如何找出线程安全问题的代码
* 和同步函数。
*
*/
public class TongBuHanShu {
public static void main(String[] args) {
// TODO Auto-generated method stub
CuHu cu=new CuHu();
Thread t1=new Thread(cu);
Thread t2=new Thread(cu);
t1.start();
t2.start();
}
}
class Bank{
int sum=0;
void add(int n){
Object obj=new Object();
synchronized (obj) {//发现sum是多线程共享数据,并有多条语句操作它
//所以用将他们用同步代码块封装起来。又发现这些代码是add(int n)方法的所有代码
//所以可以用将该方法声明为同步方法,这样就不用用同步代码块将它们封装起来了。
try {
sum=sum+n;
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("储户"+Thread.currentThread()+"存入100现在银行账户余额为"+sum);
}
}
}
class CuHu implements Runnable{
Bank b=new Bank();
@Override
public void run() {
for(int i=0;i<6;i++){
b.add(100);
}
}
}
|