03月25, 2017

并发编程相关概念

并发编程相关原则概念记录。

happens-before原则

JSR-133使用happens-before来指定两个操作^1执行顺序。

  1. A happens-before B : A 操作的结果对B可见,而且A的执行顺序排在B之前。
  2. A happens-before B : Java平台不一定按照当前happens-befor关系执行^2
适用规则:
  • 程序次序规则(可指令重排序,运行结果保持一致)。
  • 锁定规则:unlock操作happens-before于同一把锁的lock操作。
  • volatile规则:volatile的写操作happens-before于读操作。
  • 传递规则: A happens-before B,B happens-before C 那么 A happens-before C。
  • 线程启动规则:线程start() happens-before于此线程的其他动作。
  • 线程中断规则:线程interrupt() happens-before于此线程检测被中断事件的发生。
  • 线程终结规则:线程中所有的操作 happens-before于线程的终止检测。
  • 对象终结规则:对象初始化方法的完成 happens-before于对象的finalize()。

发布对象

  • 发布对象 : 使一个对象能被当前范围外的代码使用。
  • 对象溢出 : 错误状态,在对象初始化未完成的情况下被其他线程所见。

线程封闭

将变量与线程绑定实现线程安全的手段

  • 堆栈封闭: 线程会持有方法局部变量的副本,故每个线程执行方法时局部变量相互隔离无并发安全问题。
  • ThreadLocal线程封闭:将变量与线程绑定的数据结构,内部维护一个Map,KEY为当前Thread对象,Value为储存的变量。

本文链接:https://check321.net/post/concurrency-concept.html

-- EOF --