课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
随着互联网的不断发展,高并发高可用性等需求都是程序员需要优先满足的开发需求,而今天我们就通过案例分析来了解一下,java高并发线程安全包含哪些类型。
1、不可变
Java内存模型中,不可变的对象一定是线程安全的,无论对象的方法实现还是方法的调用者,都不需要再进行任何线程安全保障措施。我们在介绍Java内存模型的三个特性的可见性的时候说到,被final修饰的字段在构造器中一旦被初始化完成,并且构造器没有吧“this”的引用传递出去,那么在其他线程中就能看见final字段的值。并且外部可见状态永远都不会改变,永远都不会看到它在多个线程之中处于不一致的状态。“不可变”带来的安全性是直接、纯粹的。
在Java中如果共享数据是一个基本类型,那么在定义时使用final修饰它就可以保证它是不可变的。如果共享数据是一个对象,那就需要对象自行保证其行为不会对其状态产生任何影响才行。
2、绝对线程安全
绝对线程安全是能够完全满足上面的线程安全的定义,这个绝对线程安全的定义是很严格的:“不管运行时环境如何,调用者都不需要任何额外的同步措施”。Java的API中标注自己是线程安全的类,大多数都不是绝对的线程安全。
3、相对线程安全
相对线程安全就是我们通常意义上所讲的线程安全,它需要保证对这个对象单词的操作时线程安全的,我们在调用的时候不需要进行额外的保证措施,但是对于一些特定顺序的连续调用,就可能需要在调用端使用额外的同步手段来保证调用的正确性。
4、线程兼容
线程兼容是指对象本身并不线程安全的,但是可以通过在调用端正确地使用同步手段来保证对象在并发环境中可以安全地使用。Java类库API中大部分的类都是线程兼容的,如ArrayList、HashMap等。
5、线程对立
线程对立是指不管调用端是否采用了同步措施,都无法在多线程环境中并发是使用代码。由于Java语言天生就支持多线程的特性,此案从对立这种排斥多线程的代码时很少出现的,而且通常都是有害的,应当尽量避免。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。