脏读:
对于对象的同步和异步的方法,我们在设计自己的程序的时候,一定要考虑问题的整体,不然就会出现数据不一致的错误,很经典的错误就是脏读.
首先是主线程,走着走着出现一个t1线程,t1执行run方法,调用setValue();主线程1秒的时候调了getValue()方法;
从上面看,在t1线程2秒内设置值得时候,主线程睡眠一秒后就去取值了
我希望设置值的时候没有人来打扰我,就是希望在setValue()的时候,不要去getValue()
所以需要在getValue()和setValue()两个方法上都加上synchronized关键字,保证setValue()执行结束之后,再去getValue()取值.
===================================================================
示例总结:
在我们对一个对象的方法加锁的时候,需要考虑业务的整体性,即为setValue/getValue方法同时加锁synchronized同步关键字,保证业务(service)的原子性,不然会出现业务错误(也从侧面保证业务的一致性)
厉害了!!!