文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

总结java多线程之互斥与同步解决方案

2024-04-02 19:55

关注

一、线程互斥与同步

互斥:指的是多个线程不能同时访问共享变量
同步:指的是多个线程按指定的顺序执行操作

在同时有多个线程运行过程中,如何达到互斥和同步呢?

在此使用黑马笔记中room例子来说明锁。(ps: 以前就了解锁,但总会记乱,发现使用形象化记忆后就很清楚)

在这里插入图片描述

解决互斥

解决同步

(这涉及到为什么wait(),notify()方法需要用锁,就是因为只有用了锁才能完成同步,那么怎么完成的呢?)

那么room这个数据结构其实就是synchronized的核心了,接下来总结synchronized原理的时候会一直用room的例子

二、synchronized

很多人对synchronized原理的理解也就停留在知道字节码有个monitor关键字来管理锁,再浅一点的只知道怎么用,再者懂得深一点的却记不住。我之前就是想深入了解一下但觉得苦涩,就看不下去了,看了黑马的笔记我觉得这玩意儿其实很简单,所以好的老师还是比较重要的。那么在此我也记录一下怎么更好的去理解synchronized的底层原理

从字节码我们可以知道synchronized的底层就是关联了一个monitor,那么这玩意儿是个什么东西,怎么实现锁的功能呢?

首先,可以把monitor的数据结构简化成上图的room,具体点描述如下图

在这里插入图片描述

以上就是synchronized的原理。有人就会问了,你说的这些文字我都懂啊,搞个图摆在这也没啥用。

接下来我将从上图直接回答下面的常见的问题

wait()和notify()为什么都得在synchronized后使用?

wait()会释放锁吗?

notifyALL()为什么不会唤醒其他锁对象的线程?

说说synchronized的原理?

线程什么时候从runnable变成waiting,什么时候变成block?

注意了,这里涉及monitor的原理都是synchronized最根本的原理,也称重量级锁,可以看到monitor会频繁切换线程状态,效率比较低。后来synchronized改进了,在使用monitor前还有好几种方案,分别为偏向锁,轻量锁,以及自旋优化。这部分也是面试常考点,也容易记乱,但用图例去记就很清楚。

那么接下来就说说synchronized的改进

三、轻量锁与偏向锁

轻量锁与偏向锁的核心都是先不让线程冲突的时候直接去找monitor,而是先用锁对象的对象头字段来解决冲突

(写博客好累啊。。。算了我就总结一些自己觉得关键的地方吧)

轻量锁

偏向锁

到此这篇关于总结java多线程之互斥与同步解决方案的文章就介绍到这了,更多相关java多线程之互斥与同步内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯