首页 > 编程语言 > 详细

JAVA并发编程笔记

时间:2017-02-23 21:12:52      阅读:247      评论:0      收藏:0      [点我收藏+]

  

1.并发变成的实现原理

  Volatile

    Volatile是轻量级的同步(synchronized),在多处理开发中保证了共享变量的可见性,指一个线程修改一个共享变量时,另外一个线程可以读到这个修改的值,其中instance是volatile的变量。

  实现原则

    1.Lock前缀指令会引起处理器缓存存回写到内存

    2.一个处理器的缓存回写到内存会导致其他处理器缓存无效

  synchronized(重量级锁)

    在实现同步的基础中,每一个对象可以作为锁,表现为

      1.普通同步方法,锁是当前实例对象

      2.对于同步静态方法,锁是当前CLAASS

      3.对于同步方法块,锁是Synchonized括号里配置的对象

   Synchronized的锁存在Java的对象头中,而且每个锁都有的优劣势

锁 优点 缺点 适用场景
偏向锁

加锁和解锁不需要额外的消耗,

和执行非同步方法相比仅存在纳秒级的差距

如果线程存在竞争会带来

额外的锁撤销消耗

一个线程

访问同步块场景

轻量级锁

竞争的线程不会阻塞,提高了程序的

响应速度

如果始终得不到锁竞争的线程,

使用自旋会消耗cpu

追求响应时间

同步块执行速度非常快

重量级锁  线程竞争不使用自旋,不会消耗cpu 线程阻塞,响应时间缓慢

追求吞吐量

同步块时间执行速度较长

  

      并发编程模型

    在并发编程中,需要处理两个问题,线程之间如何通信及线程之间如何同步,线程之间氛围,共享内存和消息传递

  1.共享内存的并发模型中,线程之间共享程序的公共状态,通过写读内存中的公共状态进行隐式通信,在消息传递的并发模型中,线程之间没有公共状态,线程之间必须通过发送消息来显示进行通信

  2.同步指程序中用于控制不同线程之间操作发生相对顺序的机制,在共享内存并发模型里,同步是显式进行的.

  而并发采用的是共享内存模型,Java线程之间通信总是隐式进行,过程对程序员完全透明,所以如果不了解通信机制时会产生内存可见性问题

    JMM

  java线程之间的通信由内存模型控制,jmm定义了线程和主内存之间的抽象关系,线程之间共享变量存储在主内存,每一个线程都有一个本地内存,本地内存中存储了该线程以读写共享变量的副本。

  happens-before

  用来定义分布式系统中事件的篇序关系,jmm通过happens-before关系向程序员提供跨线程的内存可见性保证.保证多线程执行结果不被改变

  as-if-serial保证了但线程内程序的执行结果不被改变。

 

      

JAVA并发编程笔记

原文:http://www.cnblogs.com/EraserHead/p/6434783.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!