公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog2,发送下载链接帮助你免费下载!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云
先说一下,我为什么要写这篇文章!因为有位网友给我发了一篇关于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性能好,每次只能同步一个值
最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!