(java怎么读)(java怎么读取键盘输入)

一、什么叫脏读?

脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。

二、Demo

(java怎么读)(java怎么读取键盘输入)

(java怎么读)(java怎么读取键盘输入)

三、执行结果

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

(0)
打赏微信扫一扫微信扫一扫QQ扫一扫QQ扫一扫
上一篇2023-06-21
下一篇2023-06-21

你可能还想知道

发表回复

登录后才能评论