线程安全是程序员在学习软件编程开发技术的时候需要重点掌握的一个概念,而今天我们就通过案例分析来了解一下,java线程安全包含哪些类型。

java 线程安全 闭包 java 线程安全类_Java

1、线程安全定义

对于线程安全的定义可以理解为:当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那就称这个对象是线程安全的。

这个定义是很严谨且有可操作性,它要求线程安全的代码都必须具备一个共同特征:代码本身封装了所有必要的正确性保障手段(互斥、同步等),令调用者无须关心多线程下的调用问题,更无须自己实现任何措施来保证多线程环境下的正确调用。

2、Java中的线程安全

要讨论Java中的线程安全,我们要以多个线程之间存在共享数据访问为前提。我们可以不把线程安全当作一个非真即假的二元排他选项来看待,而是按照线程安全的“安全程度”由强至弱来排序,将Java中各操作共享的数据分为以下五类:不可变、绝对线程安全、相对相对安全、线程兼容和线程对立。

不可变

Java内存模型中,不可变的对象一定是线程安全的,无论对象的方法实现还是方法的调用者,都不需要再进行任何线程安全保障措施。

绝对线程安全

绝对线程安全是能够完全满足上面的线程安全的定义,这个绝对线程安全的定义是很严格的:“不管运行时环境如何,调用者都不需要任何额外的同步措施”。

相对线程安全

相对线程安全就是我们通常意义上所讲的线程安全,它需要保证对这个对象单词的操作时线程安全的,我们在调用的时候不需要进行额外的保证措施,但是对于一些特定顺序的连续调用,就可能需要在调用端使用额外的同步手段来保证调用的正确性。上面的代码例子就是相对线程安全的案例。

线程兼容

线程兼容是指对象本身并不线程安全的,但是可以通过在调用端正确地使用同步手段来保证对象在并发环境中可以安全地使用。Java类库API中大部分的类都是线程兼容的,如ArrayList、HashMap等。

线程对立

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

【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。