关于线程同步,网上也有很多资料,不过不同的人理解也不大一样,最近在研究这个问题的时候回想起大学课本上的一个经典模型,即银行存取款模型,通过这个模型,我个人感觉解释起来还是比较清楚的。本文结合自己的思考对该模型进行一个简单的模拟,阐述一下我对线程同步的理解。
场景模拟
接下来使用java对该问题进行模拟。在研究这个问题时会忽略掉现实系统中的很多其他属性(官网:www.fhadmin.org),通过一个最简单的余额问题来看线程同步,这里首先创建三个类。
1.卡类,同时卡类提供三个方法,获取余额、存款以及取款。
public class Card {
/*余额初始化*/
private double balance;
public Card(double balance){
this.balance = balance;
}
/*获取余额方法*/
public double Get_balance(){
return this.balance;
}
/*存款方法*/
public void deposit(double count) throws InterruptedException{
System.out.println("存钱线程:存入金额=" + count);
double now = balance + count;
balance = now;
System.out.println("存钱线程:当前金额=" + balance);
}
/*取款方法*/
public void withdraw(double count) throws InterruptedException{
System.out.println("取钱线程:取出金额=" + count);
double now = balance - count;
balance = now;
System.out.println("取钱线程:当前金额=" + bal