美文网首页
二 线程安全

二 线程安全

作者: KeDaiBiaO1 | 来源:发表于2018-03-14 16:28 被阅读0次
编写线程安全的代码的核心是:

对可变共享的状态访问的管理。

三种(多个线程对同一个可变的状态变量没有做合适的同步时 出现错误的解决方法):
  1. 不共享
  2. 不修改
  3. 加同步 一般前两个是避免不了的时候加锁。

需要考虑线程安全的情况
对于可能被多个线程同时访问的可变状态变量,在访问它的时候都要持有同一个锁。
一般的加锁机制是 把可变共享变量封装在一个对象中,然后对本对象加锁。例如Vector类

同步策略:
  1. 内置锁(可重入),
  2. 读写锁(复制)
  3. Lock
  4. Collections获取
  5. 并发容器 原子操作 AtomicLong

原子性

原子类 AtomicLong等 作用:降低使用synchronized 并发。提升性能。

比如Vector类是同步类。
但是执行复合操作的时候并不能保证线程安全。此时需要使用锁。

复合操作 和 多线程执行顺序(竞态条件)问题 引发的无法使用原子性类解决

复合操作情况下 原子操作也会出现问题
需要使用锁

锁(原子操作无法实现的解决方法)

锁,用来锁住可变共享 状态。
有一个例子是使用了锁,但是因为不是锁的可变共享变量,而是锁的本对象(本对象并没有封装这个可变共享变量)导致线程不安全。

相关文章

  • ConcurrentHashMap源码设计分析

    二、线程安全(Thread-safe)的集合对象:● Vector 线程安全● HashTable 线程安全● S...

  • Java 多线程之线程安全的处理方式

    一、深入线程安全产生的原因 二、解决线程安全的办法 三、volatile关键字和锁的概念及其作用 一、深入线程安全...

  • 线程安全(二)

    原文链接 之前写过一篇线程安全,简单介绍了保护数据安全的多种方式,以及其中一部分方式的原理。基于此基础,本文将介绍...

  • 二 线程安全

    编写线程安全的代码的核心是: 对可变共享的状态访问的管理。 三种(多个线程对同一个可变的状态变量没有做合适的同步时...

  • [译]线程编程指南(三)

    由于文章长度限制,本文作为[译]线程编程指南(二)后续部分。 线程安全技巧 同步工具是保证代码线程安全的有效方式,...

  • 单列模式

    一:单列模式的定义 确保某个类只有一个实例。 二:线程安全 说起单列模式,不得不提线程安全,那么什么是线程安全?我...

  • StringBuilder与 StringBuffer 的区别

    一, StringBuilder是线程非安全的,StringBuffer是线程安全的。 二, 当我们在字符串缓冲去...

  • 集合类线程不安全

    线程不安全 ArrayList 如何保证list线程安全 第一,采用Collections工具类第二,采用Vect...

  • 线程笔记二(线程安全)

    线程笔记二(线程安全) ​ 如果有多个线程在同时运行,而这些线程可能会同时运行这段代码。程序每次运行结...

  • Python爬虫第六天:进程-线程-互斥锁-同步异步-队列-生产

    内容简述: 一:初始线程、进程 二:进程和线程的区别 三:线程的调用方式 四:线程安全与线程锁 ...

网友评论

      本文标题:二 线程安全

      本文链接:https://www.haomeiwen.com/subject/gzifqftx.html