![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
java基础学习
默魔
这个作者很懒,什么都没留下…
展开
-
Volatile特性之 不保证原子性
怎么导致原子性? 通过前面对JMM的介绍,我们知道, 各个线程对主内存中共享变量的操作都是各个线程各自拷贝到自己的工作内存进行操作后在写回到主内存中的。 这就可能存在一个线程AAA修改了共享变量X的值,但是还未写入主内存时, 另外一个线程BBB又对主内存中同一共享变量X进行操作, 但此时A线程工作内存中共享变量X对线程B来说是不可见, 这种工作内存与主内存同步延迟现象就造成了可见性问题。 原子性 不可分割,完整性,也就是说某个线程正在做某个具体业务时,中间不可以被加塞或者被分割,需要具体完成,要么同时成功翻译 2020-06-07 11:56:06 · 170 阅读 · 0 评论 -
Volatile 的应用
单例模式DCL代码 首先回顾一下,单线程下的单例模式代码 /** * 单例模式 * * @author xiaocheng * @date 2020/4/22 9:19 */ public class Singleton { private static Singleton singleton = null; private Singleton() { System.out.println(Thread.currentThread().getName() + "翻译 2020-06-07 14:51:56 · 167 阅读 · 0 评论 -
Volatile特性之 禁止指令重排
计算机在执行程序时,为了提高性能,编译器和处理器常常会对指令重排,一般分为以下三种: 源代码 -> 编译器优化的重排 -> 指令并行的重排 -> 内存系统的重排 -> 最终执行指令 单线程环境里面确保最终执行结果和代码顺序的结果一致 处理器在进行重排序时,必须要考虑指令之间的数据依赖性 多线程环境中线程交替执行,由于编译器优化重排的存在,两个线程中使用的变量能否保证一致性是无法确定的,结果无法预测。 指令重排 - example 1 public void mySort() { in翻译 2020-06-07 11:58:32 · 427 阅读 · 0 评论 -
CAS 比较并交换
概念 CAS的全称是Compare-And-Swap,翻译过来就是比较并交换, 它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程保证了原子性 代码使用: /** * CAS 比较并交换 * @author xiao * @date 2020/4/23 9:14 */ public class CASDemo { public static void main(String[] args) { //首先调用AtomicInteger创建了一个实例, 并初始化原创 2020-06-07 15:39:43 · 300 阅读 · 0 评论 -
对Volatile的理解
Volatile在日常的单线程环境是应用不到的 Volatile是Java虚拟机提供的轻量级的同步机制(三大特性) 保证可见性 不保证原子性 禁止指令重排 JMM是什么 JMM是Java内存模型,也就是Java Memory Model,简称JMM, 本身是一种抽象的概念,实际上并不存在,它描述的是一组规则或规范, 通过这组规范定义了程序中各个变量( 包括实例字段,静态字段和构成数组对象的元素)的访问方式 JMM关于同步的规定: 线程解锁前,必须把共享变量的值刷新回主内存 线程解锁前,必须读取主内存的最翻译 2020-06-07 11:45:25 · 68 阅读 · 0 评论 -
Eclipse Java转Web 、新建一个demo
在项目上点击右键,进入Properties配置,点击Project Facets,再点击Convert to faceted form进入属性设置: 勾选Dynamic Web Module和Java,选择相应的版本,并点击下方出现的Further configuration available: 如果忘记点击Further configuration available,即忘记修改WebContent为WebRoot, 可以点击Deployment Assembly选项,然后将WebContent删除,将原创 2020-05-18 21:05:32 · 249 阅读 · 0 评论