package com.qianfeng.bank;
import java.util.concurrent.locks.ReentrantLock;
public class Bank {
private int [] accounts = new int [100];
private Object object = new Object();
private ReentrantLock reentrantLock = new ReentrantLock();//重入锁
public Bank(){ //给所有账户置初始值1000元
for(int i=0;i<100;i++){
accounts[i] = 1000;
}
}
public void transfer(int from ,int to ,int money){
reentrantLock.lock(); //锁上进程
accounts[from] -= money;
try {
Thread.sleep(1); //模拟柜台操作时间
} catch (InterruptedException e) {
e.printStackTrace();
}
accounts[to] += money;
System.out.println(from+"向"+to+"转了"+money+"元"+"总金额"+getTotalMoney());
reentrantLock.unlock();
}
public int getTotalMoney(){
int ans = 0;
for(int i=0;i<100;i++){
ans += accounts[i];
}
return ans;
}
}
package com.qianfeng.bank;
import java.util.Random;
public class TestBank {
public static void main(String[] args) {
Bank bank = new Bank();
Random random = new Random();
for(int i=0;i<20;i++){
Thread th = new Thread(new Runnable() {
public void run() {
int from = random.nextInt(100);
int to = random.nextInt(100);
int money = 100;
bank.transfer(from, to, money);
}
});
th.start();
}
}
}