Java并发概述之安全

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

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

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

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

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

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

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

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

扫描二维码关注公众号,回复: 7129988 查看本文章

全书内容可以总结为:

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

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

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

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

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

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

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

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

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

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

第二章  共享对象

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

猜你喜欢

转载自www.cnblogs.com/qmc2077/p/11431625.html