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 使用原子变量实现线程同步 

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,966评论 25 709
  • 前 言 每个养老人在这条路上都会遇到形形色色的人或事,今天推出的【养老路上令你最印象最深刻的人或事】系列的第一篇,...
    养老运营阅读 302评论 0 0
  • 今天我只想记录此刻的所思所想,我没有别的方式可以表达,唯有如此,我现在不会见了谁都会向别人吧啦自己的情绪,甚至先生...
    蜗小简阅读 224评论 0 0
  • 秋天的叶子说了假话 南下的燕子还没到达 夏末的蝉鸣你别嘶哑 痴心妄想剩些许残渣 你还依旧的想着他吗 没落泪的眼睛别...
    XGM钟子期阅读 244评论 0 4
  • 我的“不忙”只是没急事,而不是没事做~ 接了某项目后,基本都是事~ 菜鸟一只,问题一堆,只能告诉自己这就是成长~ ...
    桌子和1106阅读 320评论 0 0