1. Synchronized如何保证原子性、可见性和有序性

原子性:确保线程互斥的访问同步代码;

可见性:保证共享变量的修改对其他线程能够及时可见。

  • 线程解锁前,必须把共享变量的最新值刷新到主内存中
  • 线程加锁时,将清空工作内存中共享变量的值,从而使用共享变量时需要从主内存中重新获取最新的值

有序性:对一个监视器锁的释放操作先行发生(happens-before)与后面对该监视器锁的获取操作

2. Synchronized使用形式

  • 对于普通同步方法,锁对象是当前实例对象。
  • 对于静态同步方法,锁对象是当前类的Class对象。
  • 对于同步方法块,锁对象是Synchonized括号里配置的对象。

3. Synchronized的缺点

各种锁并不是相互代替的,而是在不同场景下的不同选择,绝对不是说重量级锁就是不合适的。Synchronized只能升级,不能降级,即由偏向锁->轻量级锁->重量级锁,而这个过程就是开销逐渐加大的过程。

  1. 如果是单线程使用,那偏向锁毫无疑问代价最小,并且它就能解决问题,连CAS都不用做,仅仅在内存中比较下对象头就可以了;
  2. 如果出现了其他线程竞争,则偏向锁就会升级为轻量级锁;
  3. 如果其他线程通过一定次数的CAS尝试没有成功,则进入重量级锁;

比如我现在是滴滴,我早上有打车高峰,我代码使用了大量的synchronized,有什么问题?锁升级过程是不可逆的,过了高峰我们还是重量级的锁,那效率是不是大打折扣了?这个时候你用Lock是不是很好?——三太子敖丙

面试:Synchronized知识点相关推荐

  1. 高级 Java 面试通关知识点整理

    转载自 高级 Java 面试通关知识点整理 1.常用设计模式 单例模式:懒汉式.饿汉式.双重校验锁.静态加载,内部类加载.枚举类加载.保证一个类仅有一个实例,并提供一个访问它的全局访问点. 代理模式: ...

  2. JAVA编程多线程面试常见知识点灵魂拷问(一)

    1.对线程池的了解 ThreadPoolExcutor创建线程池,包含七个参数.七个参数分别是核心线程数.最大线程数.任务队列.等待时间.时间单位.线程工厂.拒绝策略. 任务加入线程池算法流程,若加入 ...

  3. Java面试常见知识点总结

    目录 面试常见知识点 静态代码块 代码块 构造方法之间的顺序 interface和abstract的区别 abstract能不能继承interface 反正可不可以 interface 和abstra ...

  4. 06-JAVA面试核心知识点整理(时间较多的同学全面复习)

    JVM (1) 基本概念: JVM是可运行Java代码的假想计算机 ,包括一套字节码指令集.一组寄存器.一个栈.一个垃圾回收,堆 和 一个存储方法域.JVM 是运行在操作系统之上的,它与硬件没有直接的 ...

  5. 2020年Android面试高频知识点小结+9家公司面试真题

    作者:小羊子说 前言 正直2020金九银十,第一次换工作或是面试候选人,我们都会对面试知识做一次总结梳理,毕竟开发技术无边界,不同人对技术的解读不同.文章总结了最近大半年中的面试考查点V1.0,希望对 ...

  6. Java面试核心知识点(283页)Java面试题合集最新版(485页)

    阿里.腾讯两大互联网企业传来裁员消息,很多人都陷入担心,不安情绪蔓延-- 其实大家应该更冷静和理性地看待大厂裁员.每年三四月都是大厂人员调整期,这个季节是各个公司战略调整.战略规划的一个关键期,肯定会 ...

  7. Android工程师面试准备知识点

    Android工程师面试准备知识点 听+7哥说,把下面的全弄懂,面试必过,所以我就试着去把所有题目补充了一下,各位能耐的网友们,如果有吐槽或者补充的尽管给我留言,在这里谢过大家了. 1.   andr ...

  8. JavaScript工作面试常用知识点总结大全

    JavaScript工作面试常用知识点总结大全 JS语言的构成 ECMAScript - JavaScript的核心 BOM - 浏览器对象模型 DOM - 文档对象模型 JS的引入方式 外部引入:通 ...

  9. C/C++面试笔试知识点总结

    C/C++面试笔试知识点总结 1.const关键字的作用?(变量,参数,返回值) 2.什么是死锁? 3.造成死锁的4个必要条件? 4.如何避免死锁? 5.static关键字作用? 6.c/c++中内存 ...

  10. C++面试基础知识点

    C++开发面试基础知识点 1. 语言基础 1.1 const的用法 1)在定义的时候必须进行初始化 2)指针可以是const  指针,也可以是指向const对象的指针 3)定义为const的形参,即在 ...

最新文章

  1. node--静态服务器
  2. ECMAScript6入门教程(一)
  3. python mainloop bind_Python3 tkinter基础 Frame bind 捕捉多键同时按
  4. jap和java有关系吗_hibernate与jpa有什么区别和联系?
  5. python文件处理seek()方法的参数是,在Python中操作文件之seek()方法的使用教程
  6. m1系统怎么重装,m1芯片怎么重装系统,苹果M1芯片重装系统,m1芯片重新安装mac
  7. [图:知识竞赛题库PPT制作] 为上海棒约翰餐饮管理有限公司定制的的知识竞赛题目及展示界面-PPT格式-双屏展示。
  8. win10杜比全景声评测_Win10安装杜比全景声音效教程
  9. 《遥感原理与应用》第三版——思维导图
  10. python怎么变白-Python将png透明变为白色并保存为jpg图片
  11. 台式计算机加固态硬盘,台式电脑加固态硬盘教程_固态硬盘台式机安装方法-win7之家...
  12. 系统架构设计方法论——IBM架构解决方案设计
  13. 【华为OJ】【MML命令执行结果查询】
  14. h0004.双倍 (10 分)
  15. android room详解
  16. 年龄到底怎么算才对_怎么算年龄才是正确的
  17. Python 字典(Dictionary. items()方法
  18. 手把手教你如何开一家生意兴隆的旅店
  19. 【动漫整理】好番推荐(含微量剧透)
  20. 使用PicGo+Gitee做图床

热门文章

  1. 如何用 R 语言的 Shiny 库编写 web 程序
  2. Git ignore UserInterfaceState.xcuserstate
  3. 2010.2--ip redirects 和 ip directed-broadcast含义
  4. Eigen教程(4)
  5. Java之多线程断点下载的实现
  6. JSTL EL 详解
  7. 【转载】Jquery中的$命名冲突的解决方案
  8. 国外大牛开发者创造出Siri第三方服务器
  9. 双色球机器学习线性回归蓝球预测案例
  10. cmd cd 无法切换目录_如何获取用户主目录?os/user 就可以了,为什么要 gohomedir...