银行有一个账户
有两个储户分别向同一个账户存3000元,每次存1000,存3次。每次存完打印账户余额。
分析:
1.是否是多线程问题? 是,两个储户线程
2.是否有共享数据?有,账户(或账户余额)、
3.是否有线程安全问题?有
4.需要考虑如何解决线程安全问题?同步机制:有三种方式
package atguigu.exer;
/**
* @author zzw
* @create 2022-06-07 9:51
*/
class Customer1 implements Runnable {
private double balance;
public Customer1(double balance) {
this.balance =balance;
}
// 存钱
public synchronized void deposit(double amt) {
if (amt >0) {
balance +=amt;
try {
Thread.sleep(100);
}catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() +":当前的余额为:" +balance);
}
}
@Override
public void run() {
for (int i =0; i <5; i++) {
deposit(1000);
}
}
}
public class AccountTest1 {
public static void main(String[]args) {
Customer1 c1 =new Customer1(0);
Thread t1 =new Thread(c1);
Thread t2 =new Thread(c1);
Thread t3 =new Thread(c1);
t1.setName("甲");
t2.setName("乙");
t3.setName("丙");
t1.start();
t2.start();
t3.start();
}
}