java多线程银行存取款_多线程学习(一)银行存取款

今天同学问到银行存取款,如何保持同步,随手写了一个简单例子.

首先是银行:

private int money = 1000;

public synchronized void add(int n) {

money += n;

try {

Thread.sleep(1000);

} catch (Exception e) {

e.printStackTrace();

}

System.out.println(Thread.currentThread().getName() + "----余额: " + money);

}

public synchronized void reduce(int n) {

if(money - n >= 0) {

money -= n;

} else {

System.out.println("余额不足");

}

try {

Thread.sleep(1000);

} catch (Exception e) {

e.printStackTrace();

}

System.out.println(Thread.currentThread().getName() + "----余额: " + money);

}

其中关键在于方法加锁,利用的是java内置的互斥锁机制.

接下来就是用户:

public Bank bank;

static final String TYPE_ADD = "add";

static final String TYPE_REDUCE = "reduce";

private String type;

private int time;

private int money;

public Customer() {

}

public Customer(Bank bank, String type, int time, int money) {

this.bank = bank;

this.type = type;

this.time = time;

this.money = money;

}

@Override

public void run() {

for(int i = 0; i < time; i++) {

if (TYPE_ADD.equals(type)) {

bank.add(money);

} else if (TYPE_REDUCE.equals(type)) {

bank.reduce(money);

}

}

}

最后是测试类:

Bank bank = new Bank();

Customer a1 = new Customer(bank, Customer.TYPE_ADD, 10, 100);

Customer a2 = new Customer(bank, Customer.TYPE_REDUCE, 10, 100);

Thread t1 = new Thread(a1);

Thread t2 = new Thread(a2);

t1.start();

t2.start();

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值