Java并发概述之安全

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

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

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

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

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

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

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

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

全书内容可以总结为:

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

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

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

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

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

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

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

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

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

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

第二章  共享对象

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

点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java锁学习(一)

作用能够保证同一时刻,最多只有一个线程执行该段代码,以达到并发安全的效果主要用于同时刻对线程间对任务进行锁地位synchronized是JAVA的原生关键字,是JAVA中最基本的互斥手段,是并发编程中的元老角色不使用并发的后果不使用并发会导致多线程情况下,同一个数据被多个线程同时更改,造成结果和预期不一致

java并发中CountDownLatch的使用

java并发中CountDownLatch的使用在java并发中,控制共享变量的访问非常重要,有时候我们也想控制并发线程的执行顺序,比如:等待所有线程都执行完毕之后再执行另外的线程,或者等所有线程都准备好了才开始所有线程的执行等。这个时候我们就可以使用到CountDownLatch。简单点讲,CountDownLatch存有一个放在QueuedS

java并发程序和共享对象实用策略

java并发程序和共享对象实用策略在并发程序中使用和共享对象时,可以使用一些实用的策略,包括:1.线程封闭2.只读共享。共享的只读对象可以由多个线程并发访问,但任何线程都不能修改它。共享的只读对象包括不可变对象和事实不可变对象3.线程安全共享。线程安全地对象在器内部实现同步。4.保护对象。被保护的对象只能通过持有特定的锁

【开发宝典】Java并发系列教程(四)

本文将给大家分享Java并发编程相关的知识点,具体将对Java常见的并发编程方式和手段进行总结,以便可以从使用角度更好地感知Java并发编程带来的效果。

Java多线程之任务执行

Java多线程之任务执行一、在线程中执行任务1.串行的执行任务在应用程序中可以通过多种策略来调度任务,而其中的策略能够更好的利用潜在的并发性。_最简单的策略就是在单个线程中串行的执行各项任务。_public class SingleThreadWebServer {