什么是线程安全?

JAVA herman 61浏览

先说一下,我为什么要写这篇文章!因为有位网友给我发了一篇关于AtomicInteger的文章:https://blog.csdn.net/fanrenxiang/article/details/80623884,说看不懂。我看了这篇文章,我说看不懂就对了,这篇文章的测试代码写的有问题。不用看了,虽然我知道他想表达的意思。这篇文章的阅读量也很高,所以我这里简单解释一下什么是线程安全!

如果说面试官让你谈谈线程安全?你只需要说到下面3点即可,其他的都不要扯!

线程安全性主要体现在三个方面:原子性、可见性、有序性!

  • 原子性:提供了互斥访问,同一时刻只能有一个线程来对它进行操作
  • 可见性:一个线程对主内存的修改可以及时的被其他线程观察到
  • 有序性:一个线程观察其他线程中的指令执行顺序,由于指令重排序的存在,该观察结果一般杂乱无序。

线程安全

说到线程安全,你只需要说到 java 中提供了两种保证线程安全的操作。一种是 JDK 中已经提供好的 Atomic 包,他们均使用了 CAS 完成线程的原子性操作,另一个是使用锁的机制来处理线程之间的原子性。锁包括:synchronized、Lock等。

你只需要把这些知识点学会了,工资绝对不会低!

具体可以参考我前面说的 juc。

java 线程安全关于 juc 下面的内容,我后面会一篇一篇的来写!大家也可以通过我的微信公众号,回复“jUC”关键字即可获得一套完整的JUC包内各类使用的视频教程!

最后我总结一下synchronized、Lock、Atomic 三者各自的特点。

  • synchronized:不可中断锁,适合竞争不激烈,可读性好   (其实我觉得现在 jdk1.8 中的效率可以了,可以直接用)
  • Lock:可中断锁,多样化同步,竞争激烈时能维持常态
  • Atomic:竞争激烈时能维持常态,比Lock性能好,每次只能同步一个值

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加QQ1群:135430763(2000人群已满),QQ2群:454796847,QQ3群:187424846。QQ群进群密码:xttblog,想加微信群的朋友,可以微信搜索:xmtxtt,备注:“xttblog”,添加助理微信拉你进群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作可添加助理微信进行沟通!

本文原文出处:业余草: » 什么是线程安全?