JAVA 线程安全

线程安全定义

一个类在可以被多个线程安全调用时就是线程安全的。

线程安全分类

线程安全不是一个非真即假的命题,可以将共享数据按照安全程度的强弱顺序分成以下五类:不可变、绝对线程安全、相对线程安全、线程兼容和线程对立。

1. 不可变

不可变(Immutable)的对象一定是线程安全的,无论是对象的方法实现还是方法的调用者,都不需要再采取任何的线程安全保障措施,只要一个不可变的对象被正确地构建出来,那其外部的可见状态永远也不会改变,永远也不会看到它在多个线程之中处于不一致的状态。

不可变的类型:

final 关键字修饰的基本数据类型;

String

枚举类型

Number 部分子类,如 Long 和 Double 等数值包装类型,BigInteger 和 BigDecimal 等大数据类型。但同为 Number 的子类型的原子类 AtomicInteger 和 AtomicLong 则并非不可变的。

2. 绝对线程安全

不管运行时环境如何,调用者都不需要任何额外的同步措施。

小编推荐一个学JAVA的学习裙【四九二,一七三,八四二】,无论你是牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发具,很多干货和技术资料分享

3. 相对线程安全

相对的线程安全需要保证对这个对象单独的操作是线程安全的,在调用的时候不需要做额外的保障措施,但是对于一些特定顺序的连续调用,就可能需要在调用端使用额外的同步手段来保证调用的正确性。

4. 线程兼容

线程兼容是指对象本身并不是线程安全的,但是可以通过在调用端正确地使用同步手段来保证对象在并发环境中可以安全地使用,我们平常说一个类不是线程安全的,绝大多数时候指的是这一种情况。Java API 中大部分的类都是属于线程兼容的,如与前面的 Vector 和 HashTable 相对应的集合类 ArrayList 和 HashMap 等。

5. 线程对立

线程对立是指无论调用端是否采取了同步措施,都无法在多线程环境中并发使用的代码。由于 Java 语言天生就具备多线程特性,线程对立这种排斥多线程的代码是很少出现的,而且通常都是有害的,应当尽量避免。

小编推荐一个学JAVA的学习裙【四九二,一七三,八四二】,无论你是牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发具,很多干货和技术资料分享

更多内容请关注,每天进步一点。

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

推荐阅读更多精彩内容

  • 1 - 线程安全的定义 当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行...
    彬彬酱阅读 2,572评论 0 12
  • 线程安全:当多个线程访问一个对象时,如果不需要考虑运行时环境下的调度和交替执行,也不需要额外的同步,以及在调用方不...
    西5d阅读 631评论 1 0
  • 一、线程安全的概念 当多个线程访问一个对象时,如果不考虑这些线程在运行时环境下的调度和交替执行,也不需要进行...
    不是明天阅读 2,219评论 0 3
  • 年初二,海边的停泊着些渔船,岸边有两家渔获在叫卖,我们看着别人家邀了一条大石斑、几只花蟹还有些许扇贝,我们也...
    吴佟阅读 116评论 0 0
  • T先生,你拉着厚重的行李箱,穿着你平日爱穿的米色风衣,站在离我数米的地方,神情淡漠,言语冷清,你说,这次你不得不离...
    孤独毒阅读 457评论 0 0