论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
Java面试之多线程&并发篇(7)
Java面试之多线程&并发篇(7)
慢吞云雾缓吐愁
论坛元老
|
2024-11-22 18:14:04
|
显示全部楼层
|
阅读模式
楼主
主题
1541
|
帖子
1541
|
积分
4623
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
媒介
原来想着给自己放松一下,刷刷博客,突然被几道面试题难倒!线程安全需要包管几个基本特性?说一下线程之间是如何通信的?CAS的原理呢?CAS有什么缺点吗?好像有点模糊了,那就大概看一下面试题吧。好记性不如烂键盘
*** 12万字的java面试题整理 ***
*** java核心面试知识整理 ***
*** Java高频面试讲解视频(知识涵盖齐全) ***
线程安全需要包管几个基本特性?
原子性,简单说就是相关操纵不会中途被其他线程干扰,一样平常通过同步机制实现。
可见性,是一个线程修改了某个共享变量,其状态能够立即被其他线程知晓,通常被解释为将线程本地状态反映到主内存上,volatile 就是负责包管可见性的。
有序性,是包管线程内串行语义,避免指令重排等。
说一下线程之间是如何通信的?
线程之间的通信有两种方式:共享内存和消息传递。
共享内存
在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式举行通信。典型的共享内存通信方式,就是通过共享对象举行通信。
例如上图线程 A 与 线程 B 之间如果要通信的话,那么就必须履历下面两个步骤:
线程 A 把本地内存 A 更新过得共享变量刷新到主内存中去。
线程 B 到主内存中去读取线程 A 之前更新过的共享变量。
消息传递
在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过明确的发送消息来显式举行通信。在 Java 中典型的消息传递方式,就是 wait() 和 notify() ,或者 BlockingQueue 。
CAS的原理呢?
CAS叫做CompareAndSwap,比较并互换,主要是通过处理处罚器的指令来包管操纵的原子性,它包罗三个操纵数:
变量内存地址,V表示
旧的预期值,A表示
准备设置的新值,B表示
当实行CAS指令时,只有当V等于A时,才会用B去更新V的值,否则就不会实行更新操纵。
CAS有什么缺点吗?
CAS的缺点主要有3点:
ABA题目
:ABA的题目指的是在CAS更新的过程中,当读取到的值是A,然后准备赋值的时间仍旧是A,但是实际上有可能A的值被改成了B,然后又被改回了A,这个CAS更新的漏洞就叫做ABA。只是ABA的题目大部分场景下都不影响并发的最终效果。
Java中有AtomicStampedReference来解决这个题目,他加入了预期标志和更新后标志两个字段,更新时不光检查值,还要检查当前的标志是否等于预期标志,全部相等的话才会更新。
循环时间长开销大
:自旋CAS的方式如果长时间不乐成,会给CPU带来很大的开销。
只能包管一个共享变量的原子操纵
:只对一个共享变量操纵可以包管原子性,但是多个则不行,多个可以通过AtomicReference来处理处罚或者使用锁synchronized实现。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
慢吞云雾缓吐愁
论坛元老
这个人很懒什么都没写!
楼主热帖
聊聊 C# 方法重载的底层玩法 ...
使用 Mypy 检查 30 万行 Python 代码, ...
Linux安装PHP8 新版笔记
微信公众平台测试号申请、使用HBuilder ...
【只与自己有关】人往高处走?何为高? ...
Blazor WebAssembly + Grpc Web = 未来 ...
【MAC工具】各个Xcode版本对应macOS的 ...
Apache Shiro 身份验证绕过漏洞 (CVE-2 ...
Mybatis基础知识大全!!!
Java多线程(7):JUC(上)
标签云
集成商
AI
运维
CIO
存储
服务器
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表