Java内存模型
sh苏苏
写的一手好bug
展开
-
Java内存模型学习(JMM)
JMM是什么?Java内存模型(即Java Memory Model,简称JMM)是一个抽象的概念,真是不存在,它描述的是一种规范或者规则,定义了程序如何对变量进行访问JVM运行程序的实例是线程,创建每个线程,JVM都会给它开启一片工作空间(栈空间),用于存储线程私有的数据,而JMM规定所以变量都存在于主内存中,主内存是共享区域,但是每个线程工作的时候都是在自己的工作内存中实现的,需要从主内...原创 2019-05-21 14:36:36 · 119 阅读 · 0 评论 -
学习synchronized
修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁就是用synchronized修饰实例对象中的实例方法,注意是实例方法不包括静态方法这个锁是当前对象的,如果是同一个对象则线程安全,如果不是同一个对象,修改全局变量则不安全修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁静态方法的锁是class本身,可以解决不是同一个对象访问时造成的安全问题修饰代码...原创 2019-05-21 17:27:25 · 113 阅读 · 0 评论 -
并发学习-final
对于 final 域,编译器和CPU要遵守两个重排序规则:final 写:“构造函数内对一个final域的写入”,与“随后把这个被构造对象的引用赋值给一个引用变量”,这两个操作之间不能重排序。final 读:“初次读一个包含final域的对象的引用”,与“随后初次读对象的final域”,这两个操作之间不能重排序。写 final 域的重排序规则禁止把 final 域的写重排序到构造函数之外。...原创 2019-05-22 10:22:36 · 124 阅读 · 0 评论 -
volatile和final
http://www.infoq.com/cn/articles/java-memory-model-4?utm_source=infoq&utm_medium=related_content_link&utm_campaign=relatedContent_articl...转载 2019-05-22 10:38:47 · 337 阅读 · 0 评论 -
不用synchronized和lock,实现线程安全的单例模式
转自(https://blog.csdn.net/vincentff7zg/article/details/58057668)总结:单例模式必然会被多个线程访问。多线程访问一定要注意锁的问题。参考博主之前分享的转载文章《java中的锁》,有几种方式如下:自旋锁类锁和对象锁共享锁和排它锁偏向锁互斥锁闭锁活锁分段锁无锁无状态编程线程本地存储volatileCAS协程...转载 2019-05-22 11:32:32 · 502 阅读 · 1 评论 -
如何实现线程安全的单例模式
单例模式懒汉式这个模式天生就是线程安全的,在类加载的时候就会初始化实例,但是这种模式的问题是内存中不管会不会用到这个对象,它都一直在那放着volatile+双重检查锁(DCL)双重检查锁保证了当前时刻只有一个线程可以进来初始化实例,而volatile保证了初始化实例的时候不会发生指令重排序,导致对象为null...原创 2019-05-23 10:11:24 · 943 阅读 · 2 评论