一个、什么是线程安全

编写线程安全的代码

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

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



线程安全性

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

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





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

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

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

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



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. Ansj配置指南!

    =.= 折腾死 ①你想要http://maven.ansj.org/org/ansj/ansj_seg/找一个尽可能高的版本号,比方2.0.7,点进去之后找到相应的jar,比方ansj_seg-2.0 ...

  2. SQL Server :理解数据页结构

    原文:SQL Server :理解数据页结构 我们都很清楚SQL Server用8KB 的页来存储数据,并且在SQL Server里磁盘 I/O 操作在页级执行.也就是说,SQL Server 读取或 ...

  3. json与jsonp区别浅析(json才是目的,jsonp只是手段) (转)

    一言以蔽之,json返回的是一串数据:而jsonp返回的是脚本代码(包含一个函数调用): JSON其实就是JavaScript中的一个对象,跟var obj={}在质上完全一样,只是在量上可以无限扩展 ...

  4. android定位方式

    做移动互联网就不太可能不碰手机端的开发.上周为了项目需要,俺也挽袖子抡胳膊开始写起了android程序,还好有java基础,倒也上手快,写了几个小程序,主要都是关于定位方面的. 网上也搜得到一些相关的 ...

  5. Android在浏览器启动APP

    要想在浏览器启动APP的方法例如以下: 在须要跳转的ACTIVITY中加入intent-filter的相关信息: <intent-filter>     <data android: ...

  6. Binder Proxy技术方案

    Binder Proxy技术方案 作者 低端码农 时间 2014.08.23 0x0 看到有多朋友尝试通过hook系统进程system_process的ioctl,以企图截获系统的IPC通讯.这个方法 ...

  7. 求pi 的公式

    pi = 3.1415926..... 下面用c 语言来求解PI 现有公式 (pi*pi)/6 = 1 + 1/(2*2) + 1/(3*3) + ... + 1/(n*n); #include &l ...

  8. RH033读书笔记(5)-Lab 6 Exploring the Bash Shell

    Lab 6 Exploring the Bash Shell Sequence 1: Directory and file organization 1. Log in as user student ...

  9. Java设计模式菜鸟系列(两)建模与观察者模式的实现

    转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39755577 观察者(Observer)模式定义:在对象之间定义了一对多的依赖关系,这样一 ...

  10. Serializable Clonable

    序列化机制有一种很有趣的用法:可以方便的克隆对象,只要对应的类是可序列化的即可.操作流程:直接将对象序列化到输出流中,然后将其读回.这样产生的新对象是对现有对象的一个深拷贝(deep copy).在此 ...