首页 / JAVA / Java多线程(三)显式锁和AQS
Java多线程(三)显式锁和AQS
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java多线程(三)显式锁和AQS,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1156字,纯文字阅读大概需要2分钟。
内容图文
![Java多线程(三)显式锁和AQS](/upload/InfoBanner/zyjiaocheng/634/fb18c856aee94b88915bc342dfc7f139.jpg)
·什么是原子操作?怎么实现原子操作?
synchronized关键字是基于阻塞的锁机制,有几个问题:
1 被阻塞的线程优先级很高怎么办
2 拿到锁的线程一直不释放锁
3 有大量线程竞争怎么办,会消耗CPU,会有死锁或者活锁出现
4 力度太大,如计数器就不需要这么限制
CAS的原理(compare and swap):
指令级别保证这是一个原子操作
三个运算符: 内存地址V,期望值A,一个新值B
如果地址V上的值和期望的值A相等,那么就给地址V赋新值B
如果一直不是期望的值,就在循环(自旋、死循环)里面不断进行CAS,一直到成功为止
CAS会带来三个问题:
ABA问题:A-->B-->A第一次取的时候是A值,第二次放的时候还是A值,以为没有变化实际上变化了(解决方法: 添加版本号)
如果CAS操作长期不成功,cpu不断循环,开销问题
CAS只能保证单个变量的原子操作
·原子操作类的使用
AtomicInteger中包含方法:get()、getAndIncrement()、IncrementAndGet()等
AtomicReference中compareandSet()并不会改变原始对象
AtomicMarkableReference,boolean,只关心又没有人动过(ABA问题解决)
AtomicStampedReference,记录动过几次(ABA问题解决)
·显式锁:
synchronized关键字别名是内置锁,是由java语言特性本身提供的功能,但是所得获取和释放固化了,智能先获取,再释放,Lock接口灵活许多,synchronized在获取锁的过程中是不能够被中断的
内容总结
以上是互联网集市为您收集整理的Java多线程(三)显式锁和AQS全部内容,希望文章能够帮你解决Java多线程(三)显式锁和AQS所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。