【发布时间】:2013-06-22 17:10:48
【问题描述】:
假设我要实现一个非常简单的Bank Account 类,并且我们要处理并发和多线程问题,
即使 balance 是 AtomicInteger ,创建以下方法 synchronized 是否是个好主意?
另一方面,如果我们将所有方法都设为同步,那么AtomicInteger 就不再有用了,对吧?
import java.util.concurrent.atomic.AtomicInteger;
public class Account {
AtomicInteger balance;
public synchronized int checkBalance(){
return this.balance.intValue();
}
public synchronized void deposit(int amount){
balance.getAndAdd(amount);
}
public synchronized boolean enoughFund(int a){
if (balance.intValue() >= a)
return true;
return false;
}
public synchronized boolean transfer_funds(Account acc, int amount){ // dest : acc
if (enoughFund(amount)){
withdraw(amount);
acc.deposit(amount);
return true;
}
return false;
}
public synchronized boolean withdraw(int amount){
if (checkBalance() < amount)
return false;
balance.getAndAdd(-1 * amount);
return true;
}
}
【问题讨论】:
标签: java multithreading concurrency