什么是线程安全?

举报
程序员小假 发表于 2025/08/28 15:46:20 2025/08/28
【摘要】 线程安全就是说多线程访问同一段代码,不会产生不确定的结果。我认为:如果你的代码在多线程执行和单线程下执行永远都能获得一样的结果,那么你的代码就是线程安全的。线程安全的几个级别如下:不可变像 String、Integer、Long 这些,都是 final 类型的类,任何一个线程都改变不了它们的值,要改变除非新创建一个,因此这些不可变对象不需要任何同步手段就可以直接在多线程环境下使用绝对线程安全...
线程安全就是说多线程访问同一段代码,不会产生不确定的结果。
我认为:如果你的代码在多线程执行和单线程下执行永远都能获得一样的结果,那么你的代码就是线程安全的
线程安全的几个级别如下:

不可变

像 String、Integer、Long 这些,都是 final 类型的类,任何一个线程都改变不了它们的值,要改变除非新创建一个,因此这些不可变对象不需要任何同步手段就可以直接在多线程环境下使用

绝对线程安全

不管运行环境如何,调用者都不需要额外的同步措施。要做到这一点通常需要付出许多额外的代价,Java 中标注自己的线程安全的类,实际上绝大多数都不是线程安全的

不过绝对线程安全的类,Java 中也有,比方说 CopyOnWriteArrayList,CopyOnWriteArraySet

相对线程安全

相对线程安全也就是我们通常意义上所说的线程安全,像 Vector 这种,add、remove 方法都是原子操作,不会被打断,但也仅限于此,如果有个线程在遍历某个 Vector、有个线程同时在 add 这个 Vector,99% 的情况下都会出现 ConcurrenModificationException,也就是 fail - fast 机制

线程非安全

这个就没什么好说的了,ArrayList、LinkedList、HashMap 等都是线程非安全的类
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。