二 线程安全

编写线程安全的代码的核心是:

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

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

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

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

原子性

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

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

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

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

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 上一篇文章中介绍了多线程的基本使用,这一篇文章重点介绍线程的安全问题。 四、Java中线程的五种状态 新建状态(N...
    地球是猿的阅读 723评论 0 1
  • 一.线程安全性 线程安全是建立在对于对象状态访问操作进行管理,特别是对共享的与可变的状态的访问 解释下上面的话: ...
    黄大大吃不胖阅读 880评论 0 3
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,395评论 11 349
  • 第三章 Java内存模型 3.1 Java内存模型的基础 通信在共享内存的模型里,通过写-读内存中的公共状态进行隐...
    泽毛阅读 4,400评论 2 22
  • 我心中永远坚强、勇敢的杂草杉菜(大S) 西方曾经有位哲人说过, 女人啊, 华丽的金钻,闪耀的珠光, 为你赢得了女皇...
    keqing阅读 324评论 0 0