1.数据结构:数组、链表、栈、队列、数 2.jmm内存模型:jmm java memory model java内存模型volatile具备两种特性,第一就是保证共享变量对所有线程的可见性。将一个共享变量声明为volatile后,会有以下效应: 1.当写一个volatile变量时,JMM会把该线程对 ...
分类:
其他好文 时间:
2019-09-18 01:10:06
阅读次数:
98
线程安全是多线程开发的根基, 我们能够使用volatile保证变量更新的数据其他线程能够看到, 但是如果两个线程同时操作一个数据, 线程安全无法保证. 下面的例子中, i的结果大概率小于我们预期的200000, 原因就在于T1,T2同时获取i值, 先后写入同一个结果. 为保证线程的安全, 我们使用s ...
分类:
编程语言 时间:
2019-09-15 17:07:33
阅读次数:
111
transient volatile native final Integer String Class &&Object newInstance Class.forName,ClassLoader.loadClass ClassLoader .getResources(), ClassLoader ...
分类:
编程语言 时间:
2019-09-13 22:29:01
阅读次数:
154
对于内存模型的三大特性:有序性、原子性、可见性。 大家都知道volatile能保证可见性和有序性但是不能保证原子性,但是为什么呢? 一、原子性、有序性、可见性 1、原子性: (1)原子的意思代表着——“不可分”;(2)在整个操作过程中不会被线程调度器中断的操作,都可认为是原子性。原子性是拒绝多线程交 ...
分类:
其他好文 时间:
2019-09-13 17:40:51
阅读次数:
235
1.CPU Cache模型 + 从内存中把数据读到Cache + 在Cache中更新数据 + 把Cache中数据更新到内存 cpu缓存一致性问题 MESI() + 读操作:不做任何事情,把Cache中的数据读到寄存器 + 写操作:发出信号通知其他的CPU将该变量的Cache line置为无效,其他的 ...
分类:
其他好文 时间:
2019-09-12 21:30:38
阅读次数:
85
1、synchronized 关键字: 2、volatile 关键字: 3、Lock类: java 5 引入的新特性; 4、ThreadLocal类: 5、AtomicInteger(原子类): 6、countdownlatch: 7、CopyCurrentHashMap: 8、CopyOnWrit ...
分类:
编程语言 时间:
2019-09-12 00:05:23
阅读次数:
116
等待(wait) 和通知(notify) 这两个方法来自Object类, 使用前必须先获得目标的锁. wait()使用场景必须包含在synchronzied语句中., 当调用后,线程释放锁, 进入object对象的等待队列, 等待notify() .notifyAll()去唤醒. 等待线程结束joi ...
分类:
编程语言 时间:
2019-09-11 23:37:54
阅读次数:
98
volatile关键字 表示该变量易变,每次在访问该关键字修饰的变量时都要读内存,不对其进行优化。 mutable关键字 类的常成员函数在语义上是不允许修改类的成员变量的,但是有时候可能根据代码的需要并不是这么绝对。那么就可以使用mutable声明一个类的成员变量,它告诉编译器类的常成员函数可以修改 ...
分类:
编程语言 时间:
2019-09-11 14:15:08
阅读次数:
118
并发的特性1、可见性a、保证任何一个线程修改变量立即写入到主内存中(堆);b、所有线程对该变量引用会强制立即失效,并且该线程必须去堆中获取最新的变量值。2、指令重排序代码的执行顺序会在JVM中(编译器优化指令级并行重排序内存系统重排序最终执行的指令序列)3、原子性同一时刻最多只有一个线程访问该段代码。Volatile->可见性、指令重排序Synchronied->可见性、指令重排序、原
分类:
编程语言 时间:
2019-09-10 00:20:04
阅读次数:
84
一、volatile的作用 在《Java并发编程:核心理论》一文中,我们已经提到过可见性、有序性及原子性问题,通常情况下我们可以通过Synchronized关键字来解决这些个问题,不过如果对Synchronized原理有了解的话,应该知道Synchronized是一个比较重量级的操作,对系统的性能有 ...
分类:
编程语言 时间:
2019-09-09 11:39:04
阅读次数:
115