《Java并发编程实战》第二章 线程安全性 读书笔记
2016-02-02 10:16
399 查看
一、什么是线程安全性
编写线程安全的代码核心在于要对状态訪问操作进行管理。
共享,可变的状态的訪问 - 前者表示多个线程訪问, 后者声明周期内发生改变.
线程安全性
核心概念是正确性。某个类的行为与其规范全然一致。
多个线程同一时候操作共享的变量,造成线程安全性问题。
* 编写线程安全性代码的三种方法:
不在线程之间共享该状态变量
将状态变量改动为不可变的变量
在訪问状态变量时使用同步
Java同步机制工具:
synchronized
volatile类型变量
显示锁(Explicit Lock )
原子变量
二、1 原子性
原子性不可再分的操作。
比如:读,原子操作,写原子操作.
改变变量的值,非原子操作,由于涉及读,改,写
线程安全须要考虑的因素:
对象状态 - 什么叫有状态和无状态?
无状态对象肯定是线性安全的?
复合操作 - 操作有多个步骤完毕的操作 (比如, 先检測后运行, 变量的操作都分类三步 : 读取 - 改动 - 写入. )
竞态条件
先检測后运行
延迟初始化竞态条件(单例, 调用方法时才返回对象)
** 待加入实例解释原子性
二、2 线程安全解决的方法
2.3 加锁机制遇到问题 - 能够保证每一个变量都是线程安全的,可是假设一个方法中同一时候有多个变量。必须保证变量同步更新才算线程安全。
多个变量时须要加同一个锁。保证多个变量同一时候更新。
2.4 用锁来保护状态
通常觉得仅仅有写入的时候才须要锁,但假设读取的时候值值不能确保是否有其它如今正在改动或者以改动,相同会遇到问题。
2.5 *** 活跃性与性能
活跃性问题?
比如: 线程A等待线程B释放其持有的资源
性能问题?
比如: 线程切换过于频繁,CPU在线程调度上花费资源过多
*** 新的文章中总结锁相关知识与问题
思考
可能出现线程安全的地方?
变量相关
方法操作变量
情况:
多个线程訪问一个变量
多个线程訪问多个变量
多个线程訪问多个方法,同一时候操作一个变量
多个线程訪问多个方法,同一时候操作多个变量
2014-05-24 发文
相关文章推荐
- Java实现计算两个日期间相隔周数
- 本地方法(JNI)——访问数组元素+错误处理
- 文件下载 浏览器直接打开文件而不是保存 相关问题
- Java基础系列:(2)关于枚举的简单总结
- JAVA-文件的输入输出
- influxdb-java
- JAVA中字符串比较equals()和equalsIgnoreCase()的区别
- 在eclipse中导入工程后@Override报错
- springmvc文件上传使用ajaxfileupload插件
- Java2EE的controller层获取session的方法
- springmvc文件上传使用uploadify插件
- 关于eclipse无法安装插件的问题
- java基础知识----IO篇
- 很有用的一个关于highcharts使用的网页
- 史上最详细的Highcharts使用指南
- 快速排序的原理及java代码实现
- java中值得注意的
- 举例讲解Java设计模式中的对象池模式编程
- Java类与文件
- java xml 框架 dom4j 解析 xml 字符串