java并发编程实战(二)—线程安全

来源:互联网 发布:淘宝图片包邮怎么设置 编辑:程序博客网 时间:2024/06/05 04:07

1 volatile变量:
volatile是一种比synchronized关键字更轻量级的同步机制。
当线程A首先写入一个volatile变量并且线程B随后读取该变量时,在写入volatile变量
之前对A可见的所有变量的值,在B读取了volatile变量后,对B是可见的。因此,从内存
可见性的角度来看,写入volatile变量相当于退出同步代码块,而读取volatile变量相当于进入同步代码块。

使用条件:
(1)对变量的写入操作不依赖变量的当前值,或者可以确保只有单线程更新变量的值
(2)该变量不会与其他状态变量一起纳入不变性条件中
(3)在访问变量时不需要加锁

2 发布和逸出
发布:使对象能够在当前作用域之外访问。最简单的发布对象方法:将对象引用保存为静态类型
逸出:某个不应该被发布的对象被发布出去。(类中的类属性)

当发布某个对象时,可能间接发布其他对象:同其他对象在同一数组或集合里。

3 线程封闭 : 单线程访问数据。
常见应用:(1)swing (2)jdbc的connection对象
3.1 Ad-hoc线程封闭
维护线程封闭性的职责完全由程序实现。
3.2 栈封闭:只能通过局部变量才能访问对象。
3.3 ThreadLocal类 提供一些方法为每个使用该变量的线程都存有一份独立的副本。
核心为ThreadLocalMap类,key为线程,value为该变量值。spring中就是使用ThreadLocal类
来保证bean的单例类型(线程安全)。

0 0