阅读笔记,线程安全性

日期:2019-09-07编辑作者:编程应用

首先使代码正确运行,然后再提高代码速度。【正确编写并发程序的方法】

线程安全: 当多个线程访问某个类(对象)时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或者协同,这个类都能表现出正确的行为,那么就称为这个类(对象)是线程安全的。

  • 知识点竞态条件:当某个计算的正确性取决于多个线程的交替执行时序。最常见的竞态条件类型先检查后执行(Check-Then-Act)对象的状态存储在状态变量中的数据。共享:变量可以由多个线程同时访问;可变:变量的值在其生命周期内可以发生变化;线程安全性:当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码不需要任何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为。

线程安全的核心在于要对对象的状态访问操作(read,write)进行管理,特别是对共享的和可变的状态的访问。

无状态对象一定是线程安全的

对象的状态指的是存储在状态变量(实例或静态域)中的数据。

  • synchronized

一个对象是否需要是线程安全的,取决于是否被多个线程访问。要使得对象是线程安全的,需要采用同步机制来协同对对象可变状态的访问。

在多个线程访问某个状态变量并且其中有一个线程执行写入时,协同这些线程对变量的访问。public synchronized int getNext(){return value++;}

Java中主要的同步机制有synchronized关键字(独占锁),有同步语义的还有volatile变量,显式锁以及原子变量。

  • 避免竞态条件

如果当多个线程访问一个可变状态变量并且没有使用正确的同步机制,就会出现错误。有三种方式修复这个错误:

在某个线程修改变量时,以原子方式执行。1. 使用现有的线程安全类。例如AtomicLong、AtomicInteger等在java.util.concurrent.atomic包中的原子类。2. 加锁【互斥锁】机制(java内置的锁机制synchronized{// 访问或修改由锁保护的共享状态}:每个java对象都可以用做一个实现同步的锁。3. 对于每个包含多个变量的不变性条件,其中涉及的所有变量都需要由同一个锁来保护。

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

  • 加锁约定

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

  1. 将所有的可变状态都封装在对象内部,并通过对象的内置锁对所有访问可变状态的代码路径进行同步。2. 尽量将synchronized控制在合理的大小。3.当执行时间较长的计算或者可能无法快速完成的操作时,一定不要持有锁

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

在并发编程中,当某个计算的正确性取决于多个线程执行的时序时,就会出现竞态条件(竞争条件)。比较常见的竞态条件类型就是“先检查后执行(Check-Then-Act)”,即通过一个可能失效的观测结果来决定下一步的行为。

要避免竞态条件,就必须在某个县城修改完可变状态后,通过某种方式防止其他线程使用这个状态,从而确保其他线程只能在修改完成之前或者之后读取和修改状态,而不是在修改过程中。

可以将会产生竞态条件的一组操作以加锁机制保证这一组以原子的形式执行,这一组操作称为复合操作。

加锁机制

要保持状态的一致性,就需要在单个原子操作中更新所有相关的状态变量。

内置锁

Java的内置锁相当于一种互斥锁

任何一个执行同步代码块的线程,都不能看到有其他线程正在执行由同一个锁保护的同步代码块

内置锁是可重入的,重入意味着获取锁的操作的粒度是县城而不是调用(POSIX互斥体的获取操作是以调用为粒度的)

本文由今晚最快开奖现场直播发布于编程应用,转载请注明出处:阅读笔记,线程安全性

关键词:

热修复热点框架简析,Android插件框架机制研商

笔者 百度任玉刚 插件化框架 途牛已上线使用帮衬代码能源文件以插件情势加入到host。 插件化的主干形式是将二个...

详细>>

Android开辟方式探求,Bitmap的加载和Cache

BitmapFactory 类提供四种方法:decodeFile、decodeResource、decodeStream和decodeByteArray;其中decodeFile和decodeResource间接的调用了...

详细>>

Android开发艺术探索,Bitmap获取缩略图

前言 追思了下此前写的调用相机和相册的机能,准备把它们构成下,想起已经用Motorola在赢得大图时OOM的主题素材,...

详细>>

读书笔记

RemoteViews是一种远程View,能够在别的进程中显得,为了能够更新它的分界面,RemoteViews提供了一组基础操成效于跨进度...

详细>>