ReentrantLock是如何在不使用volatile修饰变量是保证该变量的可见性的?

在复习《深入理解java虚拟机》的时候想到这个问题的。

因为学习多线程的时候我记得synchronized包含的代码块中所用到的共享变量是不需要加volatile修饰的,synchronized本身就保证了代码块所访问的共享变量的可见性。。。这是java本身底层所支持的特性。。

然后就产生了一个ReentrantLock的疑问:

先简单描述一下ReentrantLock是由java代码本身所实现的,我没看过源码,仅知道这回事。然后在学习的时候也是知道仅需要显式的lock和unlock就可以实现与synchronized一样的功能。

疑问是:为什么java代码本身所实现的ReentrantLock能够像synchronized一样保证同步代码块之间所使用的共享变量的可见性(并且是不需要给共享变量加volatile的),明明ReentrantLock是由java代码所实现的。。

(说一堆废话)然后就果断去百度了,看源码不是人干的事,面临着明年跳槽,一年半经验的我应该不需要纠结这个,留着时间刷大数据,以后来解决。。源码是肯定要看的,不过不是现阶段。毕竟每天我就学两小时,先学对现在更重要的知识。

然后看到知乎大神大解答,算是解决了我心中的疑惑:

至于什么是工作内存,什么是主内存,看一下《深入理解java虚拟》的内存模型吧~

知乎问题具体链接:https://www.zhihu.com/question/41016480?sort=created

发布了144 篇原创文章 · 获赞 36 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/qq_36951116/article/details/103803338
今日推荐