先说一下,我为什么要写这篇文章!因为有位网友给我发了一篇关于AtomicInteger的文章:https://blog.csdn.net/fanrenxiang/article/details/80623884,说看不懂。我看了这篇文章,我说看不懂就对了,这篇文章的测试代码写的有问题。不用看了,虽然我知道他想表达的意思。这篇文章的阅读量也很高,所以我这里简单解释一下什么是线程安全!
如果说面试官让你谈谈线程安全?你只需要说到下面3点即可,其他的都不要扯!
线程安全性主要体现在三个方面:原子性、可见性、有序性!
- 原子性:提供了互斥访问,同一时刻只能有一个线程来对它进行操作
- 可见性:一个线程对主内存的修改可以及时的被其他线程观察到
- 有序性:一个线程观察其他线程中的指令执行顺序,由于指令重排序的存在,该观察结果一般杂乱无序。
线程安全
说到线程安全,你只需要说到 java 中提供了两种保证线程安全的操作。一种是 JDK 中已经提供好的 Atomic 包,他们均使用了 CAS 完成线程的原子性操作,另一个是使用锁的机制来处理线程之间的原子性。锁包括:synchronized、Lock等。
你只需要把这些知识点学会了,工资绝对不会低!
具体可以参考我前面说的 juc。
关于 juc 下面的内容,我后面会一篇一篇的来写!大家也可以通过我的微信公众号,回复“jUC”关键字即可获得一套完整的JUC包内各类使用的视频教程!
最后我总结一下synchronized、Lock、Atomic 三者各自的特点。
- synchronized:不可中断锁,适合竞争不激烈,可读性好 (其实我觉得现在 jdk1.8 中的效率可以了,可以直接用)
- Lock:可中断锁,多样化同步,竞争激烈时能维持常态
- Atomic:竞争激烈时能维持常态,比Lock性能好,每次只能同步一个值
: » 什么是线程安全?
原创文章,作者:sunnyman218,如若转载,请注明出处:https://blog.ytso.com/251905.html