Java并发的学习内容主要来自《Java并发编程实战》一书,本文为一概述。
并发最简单的解释应该是不同任务的执行时间区间存在交集。由于时间上的交集+共享变量,并发会带来安全问题。
从任务的角度而言,任务的执行需要得到正确的效果;从对象的角度而言,对象需要被正确的访问。
所谓正确,或常说的线程安全,包括了一个对象操作,或者一个任务执行的三个方面:前置条件、不变约束、后置条件。这三个约束都与状态相关,只不过是状态在不同抽象层次上的参与。
状态(共享变量)在并发中有两个方面的语义:
1.作为对象的一部分,服从对象的约束
2.作为任务的一部分,服从任务的约束
这两个语义彼此独立,按需上锁
全书内容可以总结为:
第一部分:状态在线程中保证安全、状态在对象中保证安全、对象组合(集合作为一种特例)引入更多约束
第二部分:将任务跟线程解耦,线程本质上是OS调度的单位,解耦后引入了任务的生存周期问题,取消跟错误(超时、)的处理
第四部分:锁作为阻塞的原因,可能导致后果,Lock提供了定时、可中断、非块结构三种功能。
条件队列作为前置条件的实现:
第一章 线程安全(不小心把第一章介绍省略了嘿嘿)
书的第一章是从线程角度讲述并发安全,如果每个线程都是安全的,则并发是安全的。
单个线程的安全可以通过原子性来保证,而原子性是由锁来实现的。锁是为了确保线程互斥执行,同一个锁管理的的各个线程本质上被安排成串行了。
一个锁管理一组线程串行执行。
锁的范围由前置条件、不变约束、后置条件这三个约束所涉及到的状态的作用域范围决定,显然就成了一组共享变量作用域范围的并。
到此,从 线程——正确性约束——状态变量 这一思路分析开始有些失控了,从而开始第二章,从对象的角度,封装状态与其操作,降低思维负担。
第二章 共享对象
不行,先把各章写完再写,只看目录太少了