Volatile 关键字 Volatile 是java虚拟机提供的轻量级同步机制(保证可见性,不保证原子性,禁止指令重排) 可见性之前需要了解 JVM(java虚拟机) JMM(java内存模型) javamemory model 不真实存在描述的一种规则规范 定义了程序中各个变量(包括实例字段静态 ...
分类:
编程语言 时间:
2020-03-06 19:28:39
阅读次数:
82
在我上大学前刚开始听说软件工程这个词的时候,我心里就有了疑问,软件工程到底是做什么的?难道是做软件的?那软件又是什么?于是我那时还去上网搜了搜,解开了自己心里的疑问,我当时所理解的软件工程就是围绕软件开发相关的一个专业。 我们这学期也开了软件工程这门课,刚上课一个星期的我也对程序、软件、软件工程有了 ...
分类:
其他好文 时间:
2020-03-06 01:19:47
阅读次数:
78
目录 1 保证内存可见性 2 禁止指令重排序 3 不保证原子性 1 保证内存可见性说到内存可见性就必须要提到Java的内存模型,如下图所示: 如上图所示,所有线程的共享变量都存储在主内存中,每一个线程都有一个独有的工作内存,每个线程不直接操作在主内存中的变量,而是将主内存上变量的副本放进自己的工作内 ...
分类:
其他好文 时间:
2020-03-05 13:25:10
阅读次数:
53
转:https://mp.weixin.qq.com/s/jPIGL2jvxYvo-1WOu23VAA 可见性 的定义是:一个线程对共享变量的修改,另外一个线程能够立刻看到。 产生可见性的原因:因为进度的不及时更新,导致数据不是最新,导致决策失误。我们隐约可以看出,内存并不直接与Cpu打交道,而是通 ...
分类:
其他好文 时间:
2020-03-05 11:54:20
阅读次数:
63
上一节我和大家一起打到了并发中的恶霸 "可见性" 和 "原子性" ,这一节我们继续讨伐三恶之一的有序性。 序、有序性的阐述 有序性为什么要探讨?因为Java是面向对象编程的,关注的只是最终结果,很少去研究其具体执行过程?正如上一篇文章在介绍可见性时描述的一样,操作系统为了提升性能,将Java语言转换 ...
分类:
其他好文 时间:
2020-03-04 09:50:50
阅读次数:
101
多线程 课程内容 并发和并行 线程和进程 概念,区别 线程状态 Thread类 线程常用的方法及线程调度 sleep、yield、join、interrupet... 线程状态转化 关键字 volatile: 特征:可见性、禁止指令重排序 底层实现机制 线程同步:Synchronized 使用场景、 ...
分类:
编程语言 时间:
2020-03-03 15:00:27
阅读次数:
83
数据一致性部分借用大神“耗叔”的博客:https://coolshell.cn/articles/20793.html。 总结:volatile 关键字通过内存屏障禁止了指令的重排序,并在单个核心中,强制数据的更新及时更新到缓存。在此基础上,依靠多核心处理器的缓存一致性协议等机制,保证了变量的可见性 ...
分类:
其他好文 时间:
2020-03-02 20:44:01
阅读次数:
88
包介绍 包(package)是多个Go源码的集合,go语言有很多内置包,比如fmt,os,io等。 定义包 main包是一个可执行的包,只应用程序的入口包,编译完会生成一个可执行文件。包名可以不和文件夹的名字一样,包名不能包含-符号。 package 包名 可见性:名称变量以大写字母开始,包外可以调 ...
分类:
编程语言 时间:
2020-03-01 20:13:15
阅读次数:
66
Volatile关键字的作用? 让其他线程能够马上感知到某一线程对某个变量的修改。 1)保证可见性,对共享变量的修改,其他线程马上能感知到,但不能保证原子性。 2)保证有序性,在JVM的编译阶段和指令优化排序阶段,对于volatile修饰的变量,其代码顺序不会改变。 Volatile和Synchro ...
分类:
其他好文 时间:
2020-02-27 00:50:12
阅读次数:
60
在本文中,我们将分两部分介绍Java中的线程同步,以更好地理解Java的内存模型。介绍Java线程同步和并发是复杂应用程序各个设计阶段中讨论最多的主题。线程,同步技术有很多方面,它们可以在应用程序中实现高并发性。多年来,CPU(多核处理器,寄存器,高速缓存存储器和主内存(RAM))的发展已导致通常是开发人员往往忽略的某些领域-例如线程上下文,上下文切换,变量可见性,JVM内存型号与CPU内存型号。
分类:
编程语言 时间:
2020-02-26 17:08:12
阅读次数:
74