日期:2014-05-20  浏览次数:20686 次

问个Vector多线程问题
public void transfer (Vector<Double> accounts,int from , int to,int amount )
{
accounts.set(from, accounts.get(from)-amount);
accounts.set(to, accounts.get(to)-amount);
}
vector类的get 和set 方法是同步的,为什么一个线程完全可能在家transfer 方法中被告剥夺运行权,于是另一个线程可能在相同的存储位置存入不同的值
上面的get方法不都在set 方法内吗,怎么会出线覆盖的情况
------最佳解决方案--------------------
虽然,get 和 set 函数自身是同步的,但并不代表若干次调用之间是同步的啊。。。
------其他解决方案--------------------
两次调用同步方法的过程是获取锁-释放锁。。。。获取锁-释放锁 的过程

因为中间有释放锁,所以,两个同步方法在一起就不是原子的了
------其他解决方案--------------------
mark先,继续理解一楼的解释。
------其他解决方案--------------------

不懂啊