一、什么叫脏读?
脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。
二、Demo
三、执行结果
getValue最终结果;username = chentongwei, password = 123
setValue最终结果;username = chentongwei, password = 456
四、结果分析
同步对象锁与异步对象锁的问题
首先运行了t1线程的run方法,里面进行了setValue设值,setValue方法内部给username赋值,并且sleep2s(目的是为了重现脏读),再给password赋值
然后sleep1s,主线程在执行getValue方法进行取值,这时候setValue刚给username赋值完,主线程就进行了getValue,所以取到了最新的username,老的password,等取完了才会给password赋值。
五、解决方案
给getValue加锁(synchronized),这样就保证了一定是等到setValue运行完才会执行getValue方法,因为他两属于同一个对象锁。
输出结果:
setValue最终结果;username = chentongwei, password = 456
getValue最终结果;username = chentongwei, password = 456
后面会定期分享。
声明:我要去上班所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,版权归原作者编程界的小学生所有,原文出处。若您的权利被侵害,请联系删除。
本文标题:(java怎么读)(java怎么读取键盘输入)
本文链接:https://www.51qsb.cn/article/m9cz8.html