《Java并发编程实战》第二章 线程安全性 读书笔记


一、什么是线程安全性

编写线程安全的代码
核心在于要对状态訪问操作进行管理。
共享,可变的状态的訪问 - 前者表示多个线程訪问, 后者声明周期内发生改变.

线程安全性
核心概念是正确性。某个类的行为与其规范全然一致。
多个线程同一时候操作共享的变量,造成线程安全性问题。


* 编写线程安全性代码的三种方法:
不在线程之间共享该状态变量
将状态变量改动为不可变的变量
在訪问状态变量时使用同步

Java同步机制工具:
     synchronized
     volatile类型变量
     显示锁(Explicit Lock )
     原子变量


二、1 原子性

原子性 
不可再分的操作。
比如:读,原子操作,写原子操作.  
改变变量的值,非原子操作,由于涉及读,改,写

线程安全须要考虑的因素:
     对象状态 - 什么叫有状态和无状态?

无状态对象肯定是线性安全的?
     复合操作 - 操作有多个步骤完毕的操作 (比如, 先检測后运行, 变量的操作都分类三步 : 读取  - 改动  - 写入. )
     竞态条件
           先检測后运行
            延迟初始化竞态条件(单例, 调用方法时才返回对象)


** 待加入实例解释原子性

二、2 线程安全解决的方法

2.3  加锁机制
遇到问题 - 能够保证每一个变量都是线程安全的,可是假设一个方法中同一时候有多个变量。必须保证变量同步更新才算线程安全。
多个变量时须要加同一个锁。保证多个变量同一时候更新。

2.4 用锁来保护状态
通常觉得仅仅有写入的时候才须要锁,但假设读取的时候值值不能确保是否有其它如今正在改动或者以改动,相同会遇到问题。


2.5 *** 活跃性与性能

活跃性问题?
比如: 线程A等待线程B释放其持有的资源

性能问题?
比如: 线程切换过于频繁,CPU在线程调度上花费资源过多


*** 新的文章中总结锁相关知识与问题


思考
可能出现线程安全的地方?
变量相关
方法操作变量


情况:
多个线程訪问一个变量
多个线程訪问多个变量
多个线程訪问多个方法,同一时候操作一个变量
多个线程訪问多个方法,同一时候操作多个变量


2014-05-24  发文

原文地址:https://www.cnblogs.com/zfyouxi/p/5176879.html