一、volatile的内存语义 1.1 volatile的特性 理解volatile特性的一个好办法是把对volatile变量的单个读/写,看成是使用同一个锁对这些单个读/写操作做了同步。下面通过具体的示例来说明,示例代码如下: 假设有多个线程分别调用上面程序的3个方法,这个程序在语义上和下面程序等 ...
分类:
编程语言 时间:
2016-12-26 22:04:17
阅读次数:
288
一、不得不提的volatile volatile是个很老的关键字,几乎伴随着JDK的诞生而诞生,我们都知道这个关键字,但又不太清楚什么时候会使用它;我们在JDK及开源框架中随处可见这个关键字,但并发专家又往往建议我们远离它。比如Thread这个很基础的类,其中很重要的线程状态字段,就是用volati ...
分类:
移动开发 时间:
2016-12-26 00:28:29
阅读次数:
374
用在多线程,同步变量。 线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对A的访问其实访问的是B。只在某些动作时才进行A和B的同步。因此存在A和B不一致的情况。volatile就是用来避免这种情况的。volatile告诉jvm, 它所修饰的变量不保留拷贝,直接访问主内存中的(也就是上 ...
分类:
编程语言 时间:
2016-12-26 00:27:27
阅读次数:
329
ThreadLocal翻译成中文比较准确的叫法应该是:线程局部变量。 这个玩意有什么用处,或者说为什么要有这么一个东东?先解释一下,在并发编程的时候,成员变量如果不做任何处理其实是线程不安全的,各个线程都 在操作同一个变量,显然是不行的,并且我们也知道volatile这个关键字也是不能保证线程安全的 ...
分类:
编程语言 时间:
2016-12-25 23:21:30
阅读次数:
255
volatile使线程直接和共享内存的数据交互,阻止VM的重排序优化 ...
分类:
编程语言 时间:
2016-12-25 07:46:01
阅读次数:
296
转自:http://heaven-arch.iteye.com/blog/1160693 transient和volatile两个关键字一个用于对象序列化,一个用于线程同步,都是Java中比较高阶的话题,简单总结一下。 transient transient是类型修饰符,只能用来修饰字段。在对象序列 ...
分类:
编程语言 时间:
2016-12-24 13:52:09
阅读次数:
137
最近碰到一个这样的功能要求:怎么在一个类里面,实现高效并发处理下只可以初始化一次的方法? 实现方式: 1)volatile方式: [java] view plain copy /** * Created by Chengrui on 2015/7/28. */ public class MyThre ...
分类:
编程语言 时间:
2016-12-24 11:24:41
阅读次数:
265
Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java支持4种不同的访问权限。默认的,也称为default,在同一包内可见,不使用任何修饰符。私有的,以private修饰符指定,在同一类内可见。共有的,以public修饰符指定,对所有类可见。受保护的,以protected修饰... ...
分类:
编程语言 时间:
2016-12-22 22:34:13
阅读次数:
181
使用Runnable,Callable,Thread或者线程池 可以使用正在运行的线程,支持线程中断,通常是定义一个volatile的状态变量,在运行线程线程中读这个变量,其它线程中修改这个变量 sleep方法是在指定的时间内让正在执行的线程暂停执行,但不会释放锁。而wait方法是让当前线程等待,直 ...
分类:
编程语言 时间:
2016-12-22 14:05:26
阅读次数:
1036
1、volatile变量是一种稍弱的同步机制在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比synchronized关键字更轻量级的同步机制。 2、从内存可见性的角度看,写入volatile变量相当于退出同步代码块,而读取volatile变量 ...
分类:
编程语言 时间:
2016-12-22 11:53:41
阅读次数:
186