Dan*_*nig 6 java parallel-processing multithreading java-5
假设我们有一个名为AccountService的类来管理帐户状态.
AccountService定义为
interface AccountService{
public void debit(account);
public void credit(account);
public void transfer(Account account, Account account1);
}
Run Code Online (Sandbox Code Playgroud)
鉴于此定义,实现transfer()的最佳方法是什么,以便您可以保证传输是原子操作.
我对引用Java 1.4代码的答案以及可能使用Java 5中的java.util.concurrent资源的答案感兴趣
Edw*_*ale 11
同步两个Account对象并进行传输.确保始终以相同的顺序同步.为此,请创建Account实现Comparable,对两个帐户进行排序,然后按该顺序进行同步.
如果您没有订购帐户,如果一个线程从A转移到B而另一个从B转移到A,则会出现死锁的可能性.
这个确切的例子在Java Concurrency in Practice的第207页讨论,这是任何进行多线程Java开发的人的重要书籍.示例代码可从发布者的网站获得: