java 多线程简单实例二----两个人同一个账户取钱
思路:两个线程,一个代表取钱的操作,一个代表存钱的操作,互相不影响,但是要保证存取的数据正确。
代码如下:
package com.shone.thread.getmoney;
/**
* Created by Xiao GuoJian on 2018/1/24.
* 两个人用同一个账户在取钱
*/
class Bank{
private int money = 2000;
/**
* 银行被取出的钱
* @param getMoney
*/
public void out(int getMoney){
while (money >= 0){
synchronized (this){
if (money >= getMoney){
money = money - getMoney;
System.out.println(Thread.currentThread().getName()+" 取出"+getMoney+"元,当前余额为: "+money+" 元");
} else {
System.out.println("余额不足,当前余额为: "+money+" 元");
break;
}
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
class Person extends Thread{
private Bank bank;
private int money;//每次取出多少钱
public Person(String name,Bank bank,int money){
super(name);
this.bank = bank;
this.money = money;
}
@Override
public void run() {
super.run();
bank.out(money);
}
}
public class GetMoneyDemo {
public static void main(String[] args) {
Bank bank = new Bank();
Person personA = new Person("A",bank,100);
Person personB = new Person("B",bank,200);
personA.start();
personB.start();
}
}