Java并发概述之安全

Posted qmc2077

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java并发概述之安全相关的知识,希望对你有一定的参考价值。

Java并发的学习内容主要来自《Java并发编程实战》一书,本文为一概述。

 

并发最简单的解释应该是不同任务的执行时间区间存在交集。由于时间上的交集+共享变量,并发会带来安全问题。

从任务的角度而言,任务的执行需要得到正确的效果;从对象的角度而言,对象需要被正确的访问。

所谓正确,或常说的线程安全,包括了一个对象操作,或者一个任务执行的三个方面:前置条件、不变约束、后置条件。这三个约束都与状态相关,只不过是状态在不同抽象层次上的参与。

 

状态(共享变量)在并发中有两个方面的语义:

1.作为对象的一部分,服从对象的约束

2.作为任务的一部分,服从任务的约束

这两个语义彼此独立,按需上锁

 

全书内容可以总结为:

第一部分:状态在线程中保证安全、状态在对象中保证安全、对象组合(集合作为一种特例)引入更多约束

 

第二部分:将任务跟线程解耦,线程本质上是OS调度的单位,解耦后引入了任务的生存周期问题,取消跟错误(超时、)的处理

 

第四部分:锁作为阻塞的原因,可能导致后果,Lock提供了定时、可中断、非块结构三种功能。

      条件队列作为前置条件的实现:

 

第一章  线程安全(不小心把第一章介绍省略了嘿嘿)

书的第一章是从线程角度讲述并发安全,如果每个线程都是安全的,则并发是安全的。

单个线程的安全可以通过原子性来保证,而原子性是由锁来实现的。锁是为了确保线程互斥执行,同一个锁管理的的各个线程本质上被安排成串行了。

一个锁管理一组线程串行执行。

锁的范围由前置条件、不变约束、后置条件这三个约束所涉及到的状态的作用域范围决定,显然就成了一组共享变量作用域范围的并。

到此,从  线程——正确性约束——状态变量  这一思路分析开始有些失控了,从而开始第二章,从对象的角度,封装状态与其操作,降低思维负担。

 

第二章  共享对象

 

不行,先把各章写完再写,只看目录太少了

以上是关于Java并发概述之安全的主要内容,如果未能解决你的问题,请参考以下文章

Java 并发编程 -- 并发编程线程基础(线程安全问题可见性问题synchronized / volatile 关键字CASUnsafe指令重排序伪共享Java锁的概述)

Java并发编程系列之三JUC概述

Java并发编程之set集合的线程安全类你知道吗

java 并发 之 并发安全性问题

java并发包研究之-ConcurrentHashMap

[Java 并发编程实战] 集合框架之 同步容器类 & 并发容器类