为了账号安全,请及时绑定邮箱和手机立即绑定

Java高并发之魂:synchronized深度解析

难度入门
时长 2小时50分
学习人数
综合评分9.53
114人评价 查看评价
9.7 内容实用
9.3 简洁易懂
9.6 逻辑清晰
  • http://img1.sycdn.imooc.com//62666db000010fba13270665.jpg

    1.使用读写锁 2.使用lock

    查看全部
    1 采集 收起 来源:思考题

    2022-04-25

  • Synchronized的作用:

    官方:同步方法支持一种简单的策略来防止线程干扰和内存一致性错误:如果一个对象对多个线程可见,则对该对象变量的所有读取或写入都是通过同步方法完成的。


    一句话说出作用:能够保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全的效果。


    Synchronized的两个用法:

    • 对象锁:

      包括方法锁(默认锁对象为this当前实例对象)和同步代码块锁(自己指定锁对象)

    • 类锁:

      指synchronized修饰静态的方法或指定锁为Class对象


    性质

    • 可重入

      • 什么是可重入:指的是同一线程的外层函数获得锁之后,内层函数可以直接再次获取该锁

      • 好处:避免死锁、提升封装性

    • 不可中断

      • 一旦这个锁已经被别人获得了,如果我还想获得,我只能选择等待或者阻塞,直到别的线程释放这个锁。如果别人永远不释放锁,那么我只能永远地等下去。


    原理

    • 加锁和释放锁地原理:

      • 获取和释放锁地时机:进入和推出同步代码块(包括抛出异常)

      • 通过monitorenter和monitorexit指令

    • 可重入原理:加锁次数计数器

      • JVM会记录被加锁的次数

    • 保证可见性地原理:内存模型

      • synchronized可以保证可见性


    Synchronized缺陷

    • 效率低:锁的释放情况少、视图获得锁时不能设定超时、不能中断一个正在试图获得锁的线程

    • 不够灵活(读写锁更灵活):加锁和释放的时机单一,每个锁仅有单一的条件(某个对象),可能是不够的

    • 无法知道是否成功获取到锁


    常见面试问题

    • 使用注意点:锁的范围不宜过大、避免锁的嵌套

    • 如何选择Lock和synchronized关键字?

      • synchronized能满足需求优先使用synchronized

      • lock更灵活,但是容易编写代码出错

    • 多线程访问同步方法的各种具体情况

      确定锁对象


    思考题

    • Synchronized使得同时只有一个线程可以执行,性能较差,有什么办法可以提升性能?

      如果是读多写少的情况下,可以使用读写锁代替

    • 我想更灵活地控制锁地获取和释放(现在释放锁的时机都被规定死了),怎么办?、

      可以考虑使用Lock

        

    总结:

    一句话介绍Synchronized:

    JVM会自动通过使用monitor来加锁和解锁,保证了同时只有一个线程可以执行指定代码,从而保证了线程安全,同时具有可重入和不可中断的性质。

    查看全部
    3 采集 收起 来源:课程的总结_

    2022-01-06

  •  Synchronized的地位

      Synchronized是java的关键字,并java的怨言原生支持

     是最基础的互斥同步手段

     是并发编程中的元老级角色,是并发编程的必学内容


    查看全部
  • Synchronized的作用:能够保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全的效果。

    查看全部

举报

0/150
提交
取消
课程须知
1、基本的Java语法知识。 2、最基本的线程知识,比如在Java中如何创建线程。
老师告诉你能学到什么?
1、完全学会高并发中synchronized这个最灵魂级解决方案以及一线互联网资深工程师的开发、调试经验,提高填‘坑’能力。 2、synchronized底层原理源码深度解析、适用场景、使用和调试。 3、高并发面试中synchronized的高频经典考察点,让你在面试中和面试官聊到停不下来。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!