We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent 0566568 commit 27c029eCopy full SHA for 27c029e
04.彻底理解synchronized/java关键字---synchronized.md
@@ -238,6 +238,11 @@ HotSpot的作者经过研究发现,大多数情况下,锁不仅不存在多
238
239
开启十个线程,每个线程在原值上累加1000000次,最终正确的结果为10X1000000=10000000,这里能够计算出正确的结果是因为在做累加操作时使用了同步代码块,这样就能保证每个线程所获得共享变量的值都是当前最新的值,如果不使用同步的话,就可能会出现A线程累加后,而B线程做累加操作有可能是使用原来的就值,即“脏值”。这样,就导致最终的计算结果不是正确的。而使用Syncnized就可能保证内存可见性,保证每个线程都是操作的最新值。这里只是一个示例性的demo,聪明的你,还有其他办法吗?
240
241
+##4.1锁的粗化##
242
+- jvm中对锁的优化有一条为锁的粗化,如果一系列的连续操作都对同一个对象反复加锁和解锁甚至加锁操作是出现在循环体中的,那即使没有线程竞争频繁地进行互斥同步操作也会导致不必要的性能损耗。如果虚拟机探测到有这样一串零碎的操作都对同一个对象加锁,将会把加锁同步的范围扩展(膨胀)到整个操作序列的外部(由多次加锁编程只加锁一次)。
243
+- 如果在循环里使用println()方法,会因为这个特性影响到结果。
244
+- 例子 https://juejin.im/post/5ae9b41b518825670b33e6c4
245
+
246
> 参考文献
247
248
《java并发编程的艺术》
0 commit comments