stampedlock示例代码问题

来源:6-6 J.U.C之AQS-ReentrantLock与锁-2

红邮筒

2019-02-21

老师,在如图所示的代码的最后一行return语句执行过程中,可能存在其它写线程已经修改了数据,那么结果不还是不正确的吗?这是怎么处理保证正确性呢?
图片描述

写回答

1回答

Jimin

2019-02-21

你好,这是读操作,所有的读主要保证根据当前数据返回最新的结果而已,线程不安全指的是当前的更新忽略了其他线程的更新,导致更新的结果不正确。

如果你认为这个有问题,那你任何一次查询都是有问题的,因为你此次查询完后其他线程之后也可以过来修改数据,在那个时间点看这次查询的数据也是错误的。你仔细想想看是不是这么一回事。

1
3
红邮筒
回复
Jimin
对于这个函数来讲,如果给"读取+操作"整个过程加上悲观读锁,就不会出现从操作到返回结果过程中有写锁改变x的情况,保证了返回结果时始终是当前最新的,乐观读锁好像就不能保证返回结果时是当前最新的
2019-02-22
共3条回复

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程