一、为什么要有volatilekeyword 预计非常多java刚開始学习的人都被volatile这个keyword迷惑过。尽管网上有非常多讨论volatile的文章,但它们有的过于讲述底层原理,而没有说明其应用场景,让刚開始学习的人看后还是一头雾水;有的过于使用类比解说。造成了一定的错误。这种文章 ...
分类:
编程语言 时间:
2017-08-10 21:06:31
阅读次数:
131
单例模式的几种实现方式 单例模式的实现有多种方式,如下所示: 1、懒汉式,线程不安全 是否 Lazy 初始化:是 是否多线程安全:否 实现难度:易 描述:这种方式是最基本的实现方式,这种实现最大的问题就是不支持多线程。因为没有加锁 synchronized,所以严格意义上它并不算单例模式。这种方式 ... ...
分类:
其他好文 时间:
2017-08-10 17:02:03
阅读次数:
207
1、记录几个少见的关键字 auto 声明为自动变量,缺省时编译器一般默认为auto register 声明寄存器变量 volatile 说明变量在程序执行中可被隐含地改变 extern 声明变量是在其他文件中声明(也可以看作是引用变量)2、什么是定义? 所谓的定义就是(编译器)创建一个对象,为这个对 ...
分类:
其他好文 时间:
2017-08-10 13:45:24
阅读次数:
178
volatile的特性 当我们声明共享变量为volatile后,对这个变量的读/写将会很特别。理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个监视器锁对这些单个读/写操作做了同步。下面我们通过具体的示例来说明,请看下面的示例代码: [java] view ...
分类:
编程语言 时间:
2017-08-09 21:23:58
阅读次数:
246
Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分。本文介绍了几种有效使用 volati ...
分类:
编程语言 时间:
2017-08-09 21:11:54
阅读次数:
194
与前面介绍的锁和volatile相比较,对final域的读和写更像是普通的变量访问。对于final域,编译器和处理器要遵守两个重排序规则: 下面,我们通过一些示例性的代码来分别说明这两个规则: [java] view plain copy public class FinalExample { in ...
分类:
编程语言 时间:
2017-08-09 21:06:35
阅读次数:
193
在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。 Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了同步块synchronized和volatile关键字机制。 synchronized ...
分类:
编程语言 时间:
2017-08-09 10:17:38
阅读次数:
205
ArrayList和LinkedList的区别 知道乐观锁,悲观锁么? 什么情况下用乐观什么情况下用悲观么 volatile关键字的作用 i++是原子性的么? 继续追问内存模型 为什么要设置工作内存和主内存 记得JVM那本书上把工作内存类比为处理器的高速缓存, 所以也就这么说了 说下GC的过程吧 刚 ...
分类:
编程语言 时间:
2017-08-08 21:48:24
阅读次数:
182
原子性 1.一个操作是不可中断的,即使多个线程在一起执行的时候,一旦操作执行开始,就不会被其他的线程干扰执行并导致执行中断。 2.对于静态变量int ,2个线程同时对它进行修改,线程a对它修改为10,线程b对它修改为15,a、b线程之间是没有干扰的,最后的结果要么是10或者15。 3.非原子性操作时... ...
分类:
其他好文 时间:
2017-08-08 00:42:55
阅读次数:
225
volatile:一个线程修改了某一个共享变量的值,其他线程也是否能够立即知道这个修改的1.主要是让该“变量”在多个线程中可见,在java中每一个线程都有一块自己的工作区,其中就存放着所有线程“共享变量”的变量值的拷贝、复制。2.当线程执行时,他在自己的工作内存区操作的这些变量,为了存取这些变量,一... ...
分类:
其他好文 时间:
2017-08-08 00:42:08
阅读次数:
204