目录

  • 对象及变量的并发访问
    • synchronized同步方法
    • synchronized同步块
    • volatile关键字

对象及变量的并发访问

主要技术点:

  • synchronized对象监视器为Object时的使用
  • synchronized对象监视器为Class时的使用
  • 非线程安全时如何出现的
  • 关键字volatile的主要作用
  • 关键字volatile与synchronized的区别及使用情况

synchronized同步方法

关键字synchronized拥有锁重入功能,即在使用synchronized时,当一个线程得到一个对象锁后,再次请求该对象锁时是可以再次得到该对象的锁。
可重入锁:自己可以再次获得自己的内部锁。比如有1条线程获得了某个对象的锁,此时这个对象锁还没有释放,当其再次想要获取这个对象的锁的时候还是可以获取的,如果不可锁重入的话,会造成自身的死锁。
可重入锁也支持在父子类继承的环境中。

synchronized同步块

  • synchronized关键字声明的方法存在弊端:使用synchronized关键字能实现线程安全,但是缺点也很明显,必须等持有锁的对象任务完成后才能拥有锁,程序的运行时间会大大增加。
  • 使用synchronized同步块,当一个线程访问object的一个synchronized同步代码块时,另一个线程仍然可以访问该对象的非同步代码块,这样便可缩短程序运行时间,提高运行效率。
  • 在使用同步代码块时要注意,当一个线程访问object的一个synchronized(this)同步代码块时,其他的线程对同一个object中所有其他synchronized同步代码块将被阻塞。
  • 如果synchronized加到static方法上是给Class类上锁,而加到非static静态方法上是给对象上锁。

volatile关键字

关键字volatile的主要作用是使变量在多个线程间可见。它可以强制从公共堆栈中取得变量的值,而不是从线程私有数据栈中取得变量的值。(解释:在启动线程后,变量会存在于公共堆栈和线程私有堆栈中,JVM为了提高运行效率,会一直在私有堆栈中获取对象的值,但是线程中更新对象的值却是更新的公共变量的值。)
使用volatile关键字可以使实例变量在多个线程之间可见,但是volatile的致命缺点是不支持原子性。
synchronized和volatile比较:

  • 关键字volatile是线程同步的轻量级实现,执行效率比synchronized高,但是volatile只能用于修饰变量,而synchronized可以修饰方法,代码块;
  • 多线程访问volatile不会发生堵塞,而访问synchronized会发生堵塞;
  • volatile能保证数据的可见性,但不支持原子性;
  • 关键字volatile解决的是变量在多个线程之间的可见性,而synchronized关键字解决的是多个线程之间访问资源的同步性。
    同步性:互斥行和可见性。synchronized可以保证在同一时刻,只有一个线程执行某一个方法或者某一个代码块。

《Java多线程编程核心技术》(二)相关推荐

  1. 《视觉SLAM进阶:从零开始手写VIO》(二)

    <视觉SLAM进阶:从零开始手写VIO>第二讲 1 安装im_utils 这个工具之前就使用过了,还写了博客,没想到在这里用上了,博客地址:https://blog.csdn.net/le ...

  2. 《视觉SLAM进阶:从零开始手写VIO》第二讲作业-IMU仿真、MU imu_utils标定

    <视觉SLAM进阶:从零开始手写VIO>第二讲作业-IMU仿真.MU imu_utils标定 作业题目: 1 仿真代码解析 仿真代码地址:https://github.com/HeYiji ...

  3. 《视觉SLAM进阶:从零开始手写VIO》第三讲 基于优化的IMU预积分与视觉信息融合 作业

    <视觉SLAM进阶:从零开始手写VIO>第三讲 基于优化的IMU预积分与视觉信息融合 作业 文章目录 <视觉SLAM进阶:从零开始手写VIO>第三讲 基于优化的IMU预积分与视 ...

  4. 《视觉SLAM进阶:从零开始手写VIO》第一讲作业

    目录 1 视觉与IMU融合之后有何优势? 2 有哪些常见的视觉+IMU融合方案?有没有工业界应用的例子? 3 在学术界,VIO研究有哪些新进展?有没有将学习方法应用到VIO的例子? 4 四元数和李代数 ...

  5. 深蓝学院《从零开始手写VIO》作业一

    深蓝学院<从零开始手写VIO>作业一 深蓝学院<从零开始手写VIO>作业一 1. VIO文献阅读 1.1 视觉与IMU进行融合之后有何优势? 1.2 有哪些常见的视觉+IMU融 ...

  6. 深蓝学院《从零开始手写VIO》作业五

    深蓝学院<从零开始手写VIO>作业五 1. 完成Bundle Adjustment求解器 2. 完成测试函数 3. 论文总结 1. 完成Bundle Adjustment求解器 完成单目 ...

  7. 深蓝学院《从零开始手写VIO》作业四

    深蓝学院<从零开始手写VIO>作业四 深蓝学院<从零开始手写VIO>作业四 1. 信息矩阵分析 2. Bundle Adjustment信息矩阵的计算 深蓝学院<从零开始 ...

  8. 从零开始手写VIO 第二章 IMU传感器

    第二章 IMU传感器 课程代码: https://github.com/kahowang/Visual_Internal_Odometry/tree/main/%E7%AC%AC%E4%BA%8C%E ...

  9. 深蓝学院《从零开始手写VIO》作业七

    深蓝学院<从零开始手写VIO>作业七 深蓝学院<从零开始手写VIO>作业七 深蓝学院<从零开始手写VIO>作业七 将第二讲中的仿真数据(视觉特征,imu数据)接入V ...

  10. 深蓝学院《从零开始手写VIO》作业六

    深蓝学院<从零开始手写VIO>作业五 深蓝学院<从零开始手写VIO>作业六 1. 证明题 2. 代码题 深蓝学院<从零开始手写VIO>作业六 1. 证明题 证明Dy ...

最新文章

  1. 快消行业指的是哪些?
  2. netty单片机通讯_SSM+Netty实现软硬件通信,真实项目案例
  3. 三圆相交阴影部分面积_小学六年级图形面积的题很多家长都不会,一些初中生也未必会做...
  4. iphone静态库的加载和调试
  5. Ubuntu 扩展内存或断电之后卡在 /dev/sda1 clean 和 /dev/sda1 recovering journal
  6. ppt计算机控制系统实例,第部分计算机控制系统的应用实例.ppt
  7. delhpi7 tcombobox清楚重复项_数据分析必须想清楚的两个概念:指标和维度
  8. Android 后台发送邮件 (收集应用异常信息+Demo代码)
  9. mysql安装运行(centos)
  10. ie7span标签float换行悬浮
  11. 《21天学通Java(第7版)》—— 1.10 练习
  12. 基于深度学习的车型识别APP
  13. 论文阅读笔记|Unsuperised Deep Homography
  14. mongodb 下载
  15. AtCoder Beginner Contest 177 A~D 题解
  16. Modbus Tcp服务端使用说明书
  17. HRBUST-1814(背包问题)
  18. 美容店多店会员管理系统
  19. 2020.7.25T2魔道研究(jz暑假训练day10)
  20. 计算机毕业设计SSM动物保护资讯推荐网站【附源码数据库】

热门文章

  1. 初中学考英语听说计算机考试,2021初中学考第一次英语听说机考开考
  2. Java SSM毕设 中药店商城系统(含源码+论文)
  3. 计算机课实验报告排版,大学计算机排版作业实验报告.doc
  4. 5G发牌三周年 云网融合加速 如何解决企业网络之忧?
  5. 常见花材的固定的方法有哪些_干货贴|花材固定方法之基础篇
  6. Android学习--深入探索RemoteViews
  7. Git学习(了解版本控制、Git安装配置、Git基本理论、Git搭建、Git文件操作、使用码云或Github、IDEA集成Git,Git分支开发)
  8. 使用qq腾讯云服务器发布项目的步骤。
  9. NFT将成为美妆品牌迈入元宇宙的“发力点”
  10. 王牌战争新版本服务器维护,王牌战争8月29日停机维护更新公告