随笔分类 -  多线程

摘要:为啥加锁可以解决可见性问题呢?因为某一个线程进入synchronized代码块前后,线程会获得锁,清空工作内存,从主内存拷贝共享变量最新的值到工作内存成为副本,执行代码,将修改后的副本的值刷新回主内存中,线程释放锁。 而获取不到锁的线程会阻塞等待,所以变量的值肯定一直都是最新的。 阅读全文
posted @ 2021-01-11 00:48 大众思索 阅读(71) 评论(0) 推荐(0) 编辑
摘要:需要 原因: 防止指令重排; 其实在JAVA中进行new对象时, 有可能第一个线程进行创建的过程中,并且初始化完毕,第二个线程判断当前的指针不为空,则将对象返回,导致出错,所以需要加上volatile 阅读全文
posted @ 2021-01-11 00:25 大众思索 阅读(121) 评论(0) 推荐(0) 编辑
摘要:根据追踪volatile反编译的class文件解析后发现 ACC_VOLATILE,通过查阅官网规范发现这个方法底层调用 storeload->fence->汇编指令 lock add1 0 * 0 相当于什么都没有做,只是为了执行汇编lock指令防止重新排序 HSDIS(HotSpot disas 阅读全文
posted @ 2021-01-11 00:02 大众思索 阅读(87) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2021-01-10 22:18 大众思索 阅读(72) 评论(0) 推荐(0) 编辑