12 2021 档案

摘要:在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重排序,但是不能随意重排序,不是你想怎么排序就怎么排序,它需要满足以下两个条件: 在单线程环境下不能改变程序运行的结果; 存在数据依赖关系的不允许重排序 如果看过LZ上篇博客的就会知道,其实这两点可以归结于一点:无法通过happens-bef 阅读全文
posted @ 2021-12-27 22:51 chenssy 阅读(444) 评论(0) 推荐(0) 编辑
摘要:在上篇博客(【死磕Java并发】 深入分析volatile的实现原理)LZ提到过由于存在线程本地内存和主内存的原因,再加上重排序,会导致多线程环境下存在可见性的问题。那么我们正确使用同步、锁的情况下,线程A修改了变量a何时对线程B可见? 我们无法就所有场景来规定某个线程修改的变量何时对其他线程可见, 阅读全文
posted @ 2021-12-23 08:53 chenssy 阅读(415) 评论(0) 推荐(1) 编辑
摘要:通过前面一章我们了解了synchronized是一个重量级的锁,虽然JVM对它做了很多优化,而下面介绍的volatile则是轻量级的synchronized。如果一个变量使用volatile,则它比使用synchronized的成本更加低,因为它不会引起线程上下文的切换和调度。Java语言规范对vo 阅读全文
posted @ 2021-12-14 22:59 chenssy 阅读(650) 评论(0) 推荐(2) 编辑
摘要:记得刚刚开始学习Java的时候,一遇到多线程情况就是synchronized,相对于当时的我们来说synchronized是这么的神奇而又强大,那个时候我们赋予它一个名字“同步”,也成为了我们解决多线程情况的百试不爽的良药。但是,随着我们学习的进行我们知道synchronized是一个重量级锁,相对 阅读全文
posted @ 2021-12-13 23:39 chenssy 阅读(726) 评论(1) 推荐(2) 编辑