问题:
1、一个银行卡账户,一个线程实现每5s扣除1200元;
2、一个线程实现每3s入账100元;
3、银行卡本身每2s入账200元;
代码:
/**
* @author lzq
*
*/
class ZhangHu {
private int number = 0;
public synchronized void get(int x) {
if(number < x) {
System.out.println("余额不足");
return;
}
number = number-x;
System.out.println("出账"+x+"; 余额"+number);
}
public synchronized void put(int x) {
number = number+x;
System.out.println("入账"+x+"; 余额"+number);
}
}
class XiangChen1 extends Thread {
ZhangHu zh;
public XiangChen1(ZhangHu zh) {
this.zh = zh;
}
public void run() {
while(true) {
try {
Thread.sleep(3000);
}catch(InterruptedException e) {
e.printStackTrace();
}
zh.put(100);
}
}
}
class XiangChen2 extends Thread {
ZhangHu zh;
public XiangChen2(ZhangHu zh) {
this.zh = zh;
}
public void run() {
while(true) {
try {
Thread.sleep(5000);
}catch(InterruptedException e) {
e.printStackTrace();
}
zh.get(1200);
}
}
}
public class TestDemo15 {
public static void main(String[] args) {
ZhangHu y = new ZhangHu();
XiangChen1 x1 = new XiangChen1(y);
XiangChen2 x2 = new XiangChen2(y);
x1.start();
x2.start();
while(true) {
try {
Thread.sleep(2000);
}catch(InterruptedException e) {
e.printStackTrace();
}
y.put(200);
}
}
}
运行结果:
入账200; 余额200
入账100; 余额300
入账200; 余额500
余额不足
入账200; 余额700
入账100; 余额800
入账200; 余额1000
入账100; 余额1100
入账200; 余额1300
出账1200; 余额100
入账200; 余额300
入账100; 余额400
入账200; 余额600
余额不足
入账100; 余额700
入账200; 余额900
入账100; 余额1000
入账200; 余额1200
出账1200; 余额0
入账200; 余额200
入账100; 余额300
入账200; 余额500
入账100; 余额600
入账200; 余额800