一、什么是线程安全性

编写线程安全的代码

核心在于要对状态訪问操作进行管理。

共享,可变的状态的訪问 - 前者表示多个线程訪问, 后者声明周期内发生改变.



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





* 编写线程安全性代码的三种方法:

不在线程之间共享该状态变量

将状态变量改动为不可变的变量

在訪问状态变量时使用同步



Java同步机制工具:

     synchronized

     volatile类型变量

     显示锁(Explicit Lock )

     原子变量

二、1 原子性

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

线程安全须要考虑的因素:

     对象状态 - 什么叫有状态和无状态?

无状态对象肯定是线性安全的?

     复合操作 - 操作有多个步骤完毕的操作 (比如, 先检測后运行, 变量的操作都分类三步 : 读取  - 改动  - 写入. )

     竞态条件

           先检測后运行

            延迟初始化竞态条件(单例, 调用方法时才返回对象)


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

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

2.3  加锁机制

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

多个变量时须要加同一个锁。保证多个变量同一时候更新。



2.4 用锁来保护状态

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





2.5 *** 活跃性与性能



活跃性问题?

比如: 线程A等待线程B释放其持有的资源



性能问题?

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





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





思考

可能出现线程安全的地方?

变量相关

方法操作变量





情况:

多个线程訪问一个变量

多个线程訪问多个变量

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

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



2014-05-24  发文

《Java并发编程实战》第二章 线程安全性 读书笔记的更多相关文章

  1. JAVA并发编程实战---第二章:线程安全性

    对象的状态是指存储在状态变量中的数据.对象的状态可能包括其他依赖对象的域.例如HashMap的状态不仅存储在HashMap本身,还存储在许多Map.Entry对象中.对象的状态中包含了任何可能影响其外 ...

  2. Java并发编程实战4章

    第4章主要介绍如何构造线程安全类. 在设计线程安全类的过程中,需要包含以下三个基本要素: 找出构成对象状态的所有变量. 找出约束状态变量的不变性条件. 建立对象状态的并发访问管理策略. 构造线程安全类 ...

  3. java并发编程实战《七》安全性、活跃性以及性能问题

    安全性.活跃性以及性能问题 安全性问题 那什么是线程安全呢?其实本质上就是正确性,而正确性的含义就是程序按照我们期望的执行,不要让我们感到意外. 存在共享数据并且该数据会发生变化,通俗地讲就是有多个线 ...

  4. Java并发编程实战3章

    1.同步包括两方面:原子性和可见性. 2.可见性:因为在多线程程序中,如果没有采用正确的同步,有些线程就会得到失效数据. Java内存模型要求,变量的读取操作和写入操作都必须是原子操作,但对于非vol ...

  5. 【java并发编程实战】-----线程基本概念

    学习Java并发已经有一个多月了,感觉有些东西学习一会儿了就会忘记,做了一些笔记但是不系统,对于Java并发这么大的"系统",需要自己好好总结.整理才能征服它.希望同仁们一起来学习 ...

  6. Java并发编程实战---第六章:任务执行

    废话开篇 今天开始学习Java并发编程实战,很多大牛都推荐,所以为了能在并发编程的道路上留下点书本上的知识,所以也就有了这篇博文.今天主要学习的是任务执行章节,主要讲了任务执行定义.Executor. ...

  7. 《Java并发编程实战》/童云兰译【PDF】下载

    <Java并发编程实战>/童云兰译[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230062521 内容简介 本书深入浅出地介绍了Jav ...

  8. 《java并发编程实战》笔记

    <java并发编程实战>这本书配合并发编程网中的并发系列文章一起看,效果会好很多. 并发系列的文章链接为:  Java并发性和多线程介绍目录 建议: <java并发编程实战>第 ...

  9. [书籍翻译] 《JavaScript并发编程》 第二章 JavaScript运行模型

    本文是我翻译<JavaScript Concurrency>书籍的第二章 JavaScript运行模型,该书主要以Promises.Generator.Web workers等技术来讲解J ...

随机推荐

  1. App引导页面源代码的实现

    一.页面效果图

  2. Foundation 框架 NSArray、NSMutableArray排序

    一.使用selector对数组进行排序(无返回) 数组 book 中包含 AddressCard对象. 1.对数组调用 sortUsingSelector方法 -(void) sortByName { ...

  3. ##DAY7 UINavigationController

    ##DAY7 UINavigationController #pragma mark ———————UINavigationController——————————— 概括: 导航视图控制器也是一个视 ...

  4. If We Were a Child Again

    Description The Problem The first project for the poor student was to make a calculator that can jus ...

  5. BZOJ 1191: [HNOI2006]超级英雄Hero(二分图匹配)

    云神说他二分图匹配从来都是用网络流水过去的...我要发扬他的精神.. 这道题明显是二分图匹配.网络流的话可以二分答案+最大流.虽然跑得很慢.... -------------------------- ...

  6. jbpmAPI-6

    第六章流程. 6.1. What is BPMN 2.0 业务流程模型和符号(BPMN)2.0规范是OMG规范,不仅定义了一个标准的业务流程的图形化表述(如BPMN 1. x),但现在还包括执行语义定 ...

  7. C#数据库——用多线程来组合一个SQL语句

    StringBuffer sql = new StringBuffer();或(StringBuilder sql = new StringBuilder ()) sql.Append("s ...

  8. IOS 表视图(UITableVIew)的使用方法(7)表视图的编辑功能(拖拉调整排序位置)

    除了每个单元行左边的删除和新增图标,UITableView还支持在单元行的右侧显示一个供用户拖拉调整排序位置的控件. 不过如果要显示此控件,UITableView的数据源需要实现以下的方法. -(vo ...

  9. 自定义Chrome 背景色 (FF需要User Styles插件)

    Chrome有个自定义背景色的文件  Custom.css 默认里面什么字都没写 html, body {background-color: #e0dcc0!important;}      这个颜色 ...

  10. 基于Visual C++2013拆解世界五百强面试题--题5-自己实现strstr

    请用C语言实现字符串的查找函数strstr, 找到则返回子字符串的地址,没有找到返回为空,请用数组操作与指针操作实现 看到题目想到最简单的方法就是母字符串和子字符串比较,如果不同,将指向母字符串的指针 ...