线程安全性

定义

当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类就能表现出正确的行为,那么就称这个类时线程安全的。

状态与线程安全

1,无状态对象一定是线程安全的。
2,当无状态的类中添加一个状态时,如果该状态完全使用线程安全的对象(例如:AcomicLong)管理,则该类线程安全。
3,当状态变量的数量由一个变为多个时,即使每个状态都是线程安全的对象来管理,也未必线程安全。

与线程安全相关的名词

原子性:原子操作是指,对于访问同一个状态的所有操作(包括该操作本身)来说,这个操作是一个原子方式执行的操作
竞态条件: 当某个计算的正确性取决于多个线程的交替执行时序时,那么就会发生竞态条件。
复合操作: 我们将“先检查后执行”以及“读取-修改-写入”等操作统称为复合操作:包含了一组必须以原子方式执行的操作以确保线程安全性

内置锁

synchronized(lock){
//访问或修改由锁保护的共享状态
}

1,内置锁是支持重入的。
2,在有状态的对象中,可以使用锁来保护状态。
3,当用锁来保护状态时,如果一个操作中要调用多个方法来操作状态,那么,即使每个方法都是同步方法,也未必是线程安全的,仍然可能存在竞态条件。

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

推荐阅读更多精彩内容

  • 在构建稳健的并发程序时,必须正确地使用线程和锁。但这些终归只是一些机制。 要编写线程安全的代码,其核心在于要对状态...
    好好学习Sun阅读 589评论 0 3
  • 线程安全性 要编写线程安全的代码,其核心在于要对状态访问操作进行管理,特别是对共享的和可变的状态的访问。 "共享"...
    ChaLLengerZeng阅读 664评论 0 0
  • 并发编程简介 上古时期的计算机没有操作系统,它们从头到尾只运行一个程序。这个程序独占计算机上所有的资源。只有当一个...
    EakonZhao阅读 1,096评论 2 6
  • 什么是线程的安全性? 当多个线程访问某个类时,不管运行时环境次啊用何种调度方式或者这些线程将如何交替执行,这个类始...
    大海孤了岛阅读 957评论 0 0
  • 我本是一个尊贵的公主 遇见你 变成了流浪的女郎 吉普赛流浪的女人 你在全世界寻找着什么? 我碰见人就问 你见到我心...
    书拉蜜女_阅读 232评论 3 0