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

查询所有帐户总额的方法为什么也要用synchornized
java核心卷里的例子 Bank类 一个帐户数组 account[100] 一个transfer方法转账 从account[from] 转到 account[to] 这个方法同步了用了synchornized
但是那个查询account数组里所有元素的总和的方法为什么也要同步用synchornized?

------解决方案--------------------
查询添加synchornized,没什么具体作用,这毕竟是敏感的东西,如果这边查,那边还能有操作的话,也就相当于有脏数据了,可能会引起不必要的麻烦
------解决方案--------------------
查询当然需要加锁了。不过这种情况如果用ReadWriteLock的话,效率会高的多。可以允许多个线程同时读,但写锁是具有排他的。
------解决方案--------------------
可能怕产生 幻象读 吧。
有的线程在做转账操作,有的线程在做查询总账的操作。
两者同时进行,如果不添加同步块,
那么,查询的数据,有可能在查询期间,被别的线程调用转账操作,而更改部分数据,
使得最终求得的总账数据,与实际应该得的数据,产生不一致的现象。
也就是线程安全问题,在这个线程访问某个数据的时候,不允许其他线程更改这些数据,
哪怕我是做查询操作也一样,否则,有可能发生,最终的结果和实际的结果不一致的现象。