有两种机制防止代码块受并发访问的干扰。Java语言提供一个synchronized关键字达到这一目的,并且Java SE 5.0引入了ReentrantLook类。synchronized关键字自动提供一个锁以及相关的"条件",对于大多数需要显式锁的情况,这是很便利的。java.util.concurrent框架为这些基础机制提供了独立的类。
public class Bank {
private Lock bankLock = new ReentrantLock();
//把钱从一个帐户转到另一个帐户
public void transfer(int from, int to, double amount)
{
bankLock.lock();
try{
if (accounts[from] < amount) return;
System.out.print(Thread.currentThread());
accounts[from] -= amount;
System.out.printf(" %10.2f from %d to %d", amount, from, to);
accounts[to] += amount;
System.out.printf(" Total Balance: %10.2f%n", getTotalBalance());
}finally {
bankLock.unlock();
}
}
}