volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。 如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。 参考链接: C ...
分类:
编程语言 时间:
2018-08-31 17:11:03
阅读次数:
131
单例模式是程序设计中经常用到的,简单便捷的设计模式,也是很多程序猿对设计模式入门的第一节课。其中最经典的一种写法是: 其中有两个关键的地方:1,初始化instance实例的适合,采用两重判断对Singleton.class上锁。 2,静态变量instance使用了volatile关键字进行修饰。 第 ...
分类:
编程语言 时间:
2018-08-30 00:10:29
阅读次数:
147
volatile关键字修饰的共享变量主要有两个特点:1.保证了不同线程访问的内存可见性 2.禁止重排序 在说内存可见性和有序性之前,我们有必要看一下Java的内存模型(注意和JVM内存模型的区分) 为什么要有java内存模型? 首先我们知道内存访问和CPU指令在执行速度上相差非常大,完全不是一个数量 ...
分类:
其他好文 时间:
2018-08-27 18:10:40
阅读次数:
168
ReentrantLock概述 ReentrantLock是Lock接口的实现类,可以手动的对某一段进行加锁。ReentrantLock可重入锁,具有可重入性,并且支持可中断锁。其内部对锁的控制有两种实现,一种为公平锁,另一种为非公平锁。ReentrantLock的实现原理为volatile+CAS ...
分类:
其他好文 时间:
2018-08-26 18:16:29
阅读次数:
171
Java并发编程:volatile关键字解析 volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来 ...
分类:
编程语言 时间:
2018-08-26 12:04:31
阅读次数:
194
1.Volatile和Synchronized不同点 (1)、volatile只能作用于变量,使用范围较小。synchronized可以用在变量、方法、类、同步代码块等,使用范围比较广。 (2)、volatile只能保证可见性和有序性,不能保证原子性。而可见性、有序性、原子性synchronized ...
分类:
编程语言 时间:
2018-08-26 11:50:33
阅读次数:
126
const只读变量: const全局变量的分歧: 测试程序与运行结果如下: 通过指针修改const全局变量的例子: 结果如下: 可见修改const的全局变量会导致程序崩溃。 原因是const全局变量被存储于只读存储区了。 上图是gcc的结果。 但是这个程序在bcc编译器下可以正常运行。 bcc是一款 ...
分类:
其他好文 时间:
2018-08-25 17:30:23
阅读次数:
177
Java 1.多个线程同时读写,读线程的数量远远大于写线程,你认为应该如何解决并发的问题?你会选择加什么样的锁? 2.JAVA的AQS是否了了解,它是干嘛的? 3.除了synchronized关键字之外,你是怎么来保障线程安全的? 4.什么时候需要加volatile关键字?它能保证线程安全吗? 5. ...
分类:
其他好文 时间:
2018-08-18 10:28:40
阅读次数:
260