java笔记--关于线程同步(7种同步方式)

关于线程同步(7种方式)

本文章部分内容转载于 "http://www.cnblogs.com/XHJT/p/3897440.html"

特殊域变量(volatile)实现线程同步 开销比较小

缓存一致性原理

 JVM就会向处理器发送一条Lock前缀的指令,将这个变量所在缓存行的数据写回到系统内存,其他处理器 会先判断所在的缓存行 内存地址是否改变  如果已经修改 会标记为无效 ,等到其他处理器要对这个数据修改时  会强制从系统内存中读取数据到缓存区 在执行操作

2  synchronized关键字修饰的方法 和同步代码    重量级锁 内存开销比较大

即有synchronized关键字修饰的语句块

被该关键字修饰的语句块会自动被加上内置锁,从而实现同步

代码如:

synchronized(object){

}

注:同步是一种高开销的操作,因此应该尽量减少同步的内容。

通常没有必要同步整个方法,使用synchronized代码块同步关键代码即可。

javaSE 1.6 的优化

3  使用重入锁实现线程同步  JavaSE 5.0

在JavaSE5.0中新增了一个java.util.concurrent包来支持同步。

ReentrantLock类是可重入、互斥、实现了Lock接口的锁,

ReenreantLock类的常用方法有:

ReentrantLock() : 创建一个ReentrantLock实例

lock() : 获得锁

unlock() : 释放锁

4.使用局部变量实现线程同步

ThreadLocal() : 创建一个线程本地变量  TLS区  Android的Looper对象

5.使用阻塞队列实现线程同步

 LinkedBlockingQueue 

6 使用原子变量实现线程同步 

原子操作就是读取变量值、修改变量值、保存变量值看成一个整体来操作。即-这几种行为要么同时完成,要么都不完成

你可能感兴趣的:(java笔记--关于线程同步(7种同步方式))