一个、什么是线程安全

编写线程安全的代码

其核心是管理国事访问的操作。

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



线程安全性

核心概念是正确性。某个类的行为与其规范全然一致。

多个线程同一时候操作共享的变量,造成线程安全性问题。





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

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

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

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



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并发编程实战3章

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

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

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

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

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

  6. Java并发编程:如何创建线程?

    Java并发编程:如何创建线程? 在前面一篇文章中已经讲述了在进程和线程的由来,今天就来讲一下在Java中如何创建线程,让线程去执行一个子任务.下面先讲述一下Java中的应用程序和进程相关的概念知识, ...

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

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

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

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

  9. 2、Java并发编程:如何创建线程

    Java并发编程:如何创建线程? 在前面一篇文章中已经讲述了在进程和线程的由来,今天就来讲一下在Java中如何创建线程,让线程去执行一个子任务.下面先讲述一下Java中的应用程序和进程相关的概念知识, ...

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

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

随机推荐

  1. ASF (0) - ASF Java 项目总览

    Apache .NET Ant Library This is a library of Ant tasks that help developing .NET software. It includ ...

  2. NodeJS - Express4.0错误:Cannot read property &amp;#39;Store&amp;#39; of undefined

    Express在使用mongodb的时候app配置出错 //settings.js module.exports={ cookieSecret:"xxxx", db:"d ...

  3. 怎么做fastreport使用离线数据源

    近期使用做项目发现fastreport使用在线数据源.紧密耦合的数据库连接字符串.在部署稍加注意.easy错误.因此,是否想到脱机使用的数据源. 官方参考: watermark/2/text/aHR0 ...

  4. 新浪微博。。openapi 分享 图画+ 写作

    新浪微博困难啊 .. . .. .郁闷死了. .在此记录它 1.使用界面:https://api.weibo.com/2/statuses/upload_url_text.json 能够申请,.高级权 ...

  5. poj 3259(bellman最短路径)

    Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 30169   Accepted: 10914 Descr ...

  6. abstract修改方法

    abstract这种方法修饰,主要用在抽象类和抽象方法. 抽象的类是不可实例化的比如 public abstract class Test{ } 他能够含有抽象的方法 public abstract ...

  7. Unity3D之Vector3.Dot和Vector3.Cross采用

    在Unity3D中.Vector3.Dot表示求两个向量的点积;Vector3.Cross表示求两个向量的叉积.   点积计算的结果为数值,而叉积计算的结果为向量.两者要注意差别开来.   在几何数学 ...

  8. OWIN与Katana

    OWIN与Katana详解   前言 我胡汉三又回来了,!!!!, 最近忙成狗,实在没空写博文,实在对不起自己,博客园上逛了逛发现 我大微软还是很给力的 asp.net core 1.0 .net c ...

  9. IIS7构造Gzip压缩

    IIS7构造Gzip压缩 本文来自Kevin Yang博客 作者:Kevin Yang 开启配置HTTP压缩(GZip) 在IIS7中配置Gzip压缩相比IIS6来说实在easy了很多.并且默认情况下 ...

  10. 返璞归真 asp.net mvc (12) - asp.net mvc 4.0 新特性之移动特性

    原文:返璞归真 asp.net mvc (12) - asp.net mvc 4.0 新特性之移动特性 [索引页][源码下载] 返璞归真 asp.net mvc (12) - asp.net mvc ...