开发者社区> 问答> 正文

线程同步出现的根本原因是什么?

线程同步出现的根本原因是什么?

展开
收起
游客gwxzsspn6neze 2022-05-09 16:45:07 1140 0
来自:阿里技术
2 条回答
写回答
取消 提交回答
  • 线程同步出现的根本原因是访问公共资源需要多个操作,而这多个操作的执行过程不具备原子性,被任务调度器分开了,而其他线程会破坏共享资源,所以需要在临界区做线程的同步

    2022-05-09 19:42:43
    赞同 展开评论 打赏
  • 浙江七巧板信息科技股份有限公司 技术VP/CTO,十年编程经验,七年管理经验,09年开始做Android,历经Android App,DELL手机系统,DELL平板系统,GM车载系统的开发,13年加入移动互联网创业大军,连续创业者,目前主攻JAVA架构,搜索引擎,大数据储存。

    多线程为什么要采用同步机制,因为不同的线程有自己的栈,栈中可能引用了多个对象,而多个线程可能引用到了堆中的同一个或多个对象,而线程的栈内存当中的数据只是临时数据,最终都是要刷新到堆中的对象内存,这里的刷新并不是最终的状态一次性刷新,而是在程序执行的过程中随时刷新(肯定有固定的机制,暂不考虑),也许在一个线程中被应用对象中的某一个方法执行到一半的时候就将该对象的变量状态刷新到了堆的对象内存中,那么再从多线程角度来看,当多个线程对同一个对象中的同一个变量进行读写的时候,就会出现类似数据库中的并发问题,假设被引用对象中有一个变量SA=10,线程A读取到10,并且在栈中修改成了15但还没有刷新到堆中,线程B也读取到10,此时A刷新到堆中,则堆中被引用的变量的值变成了15,这个时候B将读取到的10修改为20,再次刷新到堆中,堆中被引用对象的变量SA值为20,这个时候A重新获取SA,发现不是15,而是20,显然出现了问题。针对上述问题,假设我们添加了同步机制,那么就可以很容易的解决。

    2022-05-09 19:27:05
    赞同 展开评论 打赏
问答地址:
来源圈子
更多
收录在圈子:
+ 订阅
问答排行榜
最热
最新

相关电子书

更多
多线程 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关实验场景

更多