前提 计算机在执行程序代码的时候,实际上执行的是一条条指令,而这些指令,肯定会涉及到数据的读取和写入操作。 在我们的程序中,所定义的变量等临时数据,计算机会放在内存中,也称为主存。 那么问题来了,CPU执行指令的速度是很快的,但是从内存中读取数据和写入数据的过程,相比CPU执行指令的速度来说是比较慢 ...
分类:
其他好文 时间:
2019-04-12 23:20:07
阅读次数:
160
volatile是java提供的一种轻量级的同步机制,被transient关键字修饰的变量不能被序列化。本文记录了对这两个比较复杂的java关键字的理解。 ...
分类:
编程语言 时间:
2019-04-12 13:45:26
阅读次数:
163
实现线程间通讯的方式: 1、共享变量实现 1.1 利用基synchronized notify wait来实现 1.2 利用lock和condition实现 1.3 利用volatile 该关键字修饰的变量直接存储在main memory 不像其他线程的变量存储在local thread 1.4 利 ...
分类:
编程语言 时间:
2019-04-11 16:30:28
阅读次数:
143
Java并发编程:volatile关键字解析https://www.cnblogs.com/dolphin0520/p/3920373.html ...
分类:
其他好文 时间:
2019-04-09 00:43:24
阅读次数:
110
https://www.cnblogs.com/chengxiao/p/6528109.html 内存可见性 留意复合类操作 解决num++操作的原子性问题 禁止指令重排序 总结 内存可见性 volatile是Java提供的一种轻量级的同步机制,在并发编程中,它也扮演着比较重要的角色。同synchr ...
分类:
编程语言 时间:
2019-04-08 19:58:21
阅读次数:
187
volatile关键字前置知识 前言:因为voaltile涉及的因素,太多,笔者先从学习volatile需要的前置知识说起。 <! more 1、高并发编程的三个要素 1.原子性 保证一个操作或者多个操作要么都成功要么都失败中间不能由于任何的因素中断 2.可见性 多么线程共享一个数据时,其中一个线程 ...
分类:
其他好文 时间:
2019-04-06 17:19:25
阅读次数:
107
最近在看 java.util.concurrent.atomic 包下的AtomicInteger源码发现它是利用CAS来实现原子操作、Volatile保证元素的可见性来实现无锁下的线程安全。 决定深入了解一下CASMySql中的MVCC(多并发版本控制)中的乐观锁也是通过CAS机制和版本号实现无锁 ...
分类:
其他好文 时间:
2019-04-04 12:53:55
阅读次数:
177
私有构造函数、私有静态变量以及 公有静态函数 几种形式: 1 懒汉式(不安全) 不使用时不加载 2 饿汉 安全 3 懒汉式 线程安全 加锁方式 不推荐使用 4 双重检查锁 线程安全 只对实例化的部分代码进行加锁 考虑下面的实现,也就是只使用了一个 if 语句。在 uniqueInstance == ...
分类:
其他好文 时间:
2019-04-03 22:22:39
阅读次数:
211
线程锁与分布式锁 1.java的synchronize和Lock都是属于线程锁,只能保证同一个进程内的多线程对共享变量修改访问同步。它们的原理都是设置一个可以让所有线程访问到标记,如synchronize是设置对象头的Mark Word,而Lock类是基于AQS的volatile修饰的state。 ...
分类:
数据库 时间:
2019-03-29 00:37:06
阅读次数:
249
volatile本身并不保证原子性和线程安全,它只保证线程可见性。比如有两个应用场景,1在单例模式的双重检测中用 2在多个线程读里,用于判断标志位 {因为redis是单线程,所以它的原子操作incre加一操作,才能保证线程安全。而java并发包中的atomic是线程安全的} 下图例子即表明,多线程时 ...
分类:
其他好文 时间:
2019-03-27 21:28:16
阅读次数:
187