模拟场景:
写一段小程序,一个方法给某人账户充值,另一个方法查询某人的账户,如果两个方法都不加锁,并发情况下肯定会问题,现在只给充值方法加锁,查询方法不加,由于synchronized与非synchronized方法可以同时运行,所以查询方法可能产生脏读问题。
{ ; ; ( , ) { . ; { .(); } ( ) { .(); } . ; } ( ) { (.(.)) { .; } ; } ([] ) { (); (() .(, )).(); ..(); ..(.()); ..(); ..(.()); } }
结果
0.0
100.0
是否需要给读方法同时加上synchronized?看需求,如果需求场景允许出现脏读(仅仅是读,不进行任何写操作),可以不用加,加上synchronized性能将急剧下降,如果场景不允许脏读,该加还是要加。
另
( ) { (.(.)) { .; } ; }
等价于
( ) { () { (.(.)) { .; } ; } }
静态方法的等价
(){ } (){ (.){ } }