package com.lovo;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Account {
private double balance;
private Lock locker = new ReentrantLock(); // 重入锁
public void deposit(double money) {
locker.lock();
try {
double newBalance = balance + money;
try {
Thread.sleep(1); // 模拟办理存款业务需要花费一段时间
}
catch (InterruptedException e) {
e.printStackTrace();
}
balance = newBalance;
}
finally {
locker.unlock();
}
}
public double getBalance() {
return balance;
}
}
package com.lovo;
public class AddMoneyThread implements Runnable {
private Account account;
private double money;
public AddMoneyThread(Account account, double money) {
this.account = account;
this.money = money;
}
@Override
public void run() {
account.deposit(money);
}
}
package com.lovo;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
class Test01 {
public static void main(String[] args) {
final Account ac = new Account();
ExecutorService service = Executors.newFixedThreadPool(100);
for(int i = 1; i <= 100; i++) {
service.execute(new AddMoneyThread(ac, 1));
}
service.shutdown(); // 等所有线程执行完毕以后将线程池关闭
while(!service.isTerminated()) {}
System.out.println("账户余额: ¥" + ac.getBalance());
}
}
模拟银行存款(进程和多线程)
最新推荐文章于 2022-07-21 02:07:04 发布