任务
存钱和取钱
当余额不足时,提示余额不足
先定义一个银行的类,在类里定义存钱和取钱的有参方法
因为多线程容易出差错,一般我习惯在写代码时顺便加上同步方法或者同步代码块,关键字synchronized
打印时可以getName()方便查看哪条线程获取的什么信息
<span style="font-size:14px;">class BankA{
int sum = 0;
public synchronized void save(int money){ //存钱
sum += money;
System.out.println(Thread.currentThread().getName()+"---存入的钱"+money);
System.out.println("账户余额"+sum);
}
public synchronized void draw(int money){ //取钱
if (sum<money) {
System.out.println("账户余额不足");
}else{
sum -=money;
System.out.println(Thread.currentThread().getName()+"余额"+sum);
}
}
}</span>
定义两个类接Runnable接口
<span style="font-size:14px;">class saveAccount implements Runnable{ //定义两个类接口
private BankA ba ;
public saveAccount(BankA ba){ //创建构造有参方法,传参数,保证取钱和存钱使用的是一个账户
this.ba = ba;
}
@Override
public void run() {
for (int i = 0; i < 10; i++) { //要执行的内容
try {
Thread.sleep(100); //让线程睡一下,可以看出运行中的问题
} catch (InterruptedException e) {
e.printStackTrace();
}
ba.save(200);
}
}
}
class drawAccount implements Runnable{
private BankA ba ;
public drawAccount(BankA ba){
this.ba = ba;
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ba.draw(100); //调用方法,传入参数
}
}
}</span>
在主方法里开启两个线程
<span style="font-size:14px;"> public static void main(String[] args) {
BankA ba = new BankA();
saveAccount sa = new saveAccount(ba);
drawAccount dr = new drawAccount(ba);
new Thread(sa).start();
new Thread(dr).start();
}</span>
运行结果