面试:Synchronized知识点
1. Synchronized如何保证原子性、可见性和有序性
原子性:确保线程互斥的访问同步代码;
可见性:保证共享变量的修改对其他线程能够及时可见。
- 线程解锁前,必须把共享变量的最新值刷新到主内存中
- 线程加锁时,将清空工作内存中共享变量的值,从而使用共享变量时需要从主内存中重新获取最新的值
有序性:对一个监视器锁的释放操作先行发生(happens-before)与后面对该监视器锁的获取操作
2. Synchronized使用形式
- 对于普通同步方法,锁对象是当前实例对象。
- 对于静态同步方法,锁对象是当前类的Class对象。
- 对于同步方法块,锁对象是Synchonized括号里配置的对象。
3. Synchronized的缺点
各种锁并不是相互代替的,而是在不同场景下的不同选择,绝对不是说重量级锁就是不合适的。Synchronized只能升级,不能降级,即由偏向锁->轻量级锁->重量级锁,而这个过程就是开销逐渐加大的过程。
- 如果是单线程使用,那偏向锁毫无疑问代价最小,并且它就能解决问题,连CAS都不用做,仅仅在内存中比较下对象头就可以了;
- 如果出现了其他线程竞争,则偏向锁就会升级为轻量级锁;
- 如果其他线程通过一定次数的CAS尝试没有成功,则进入重量级锁;
比如我现在是滴滴,我早上有打车高峰,我代码使用了大量的synchronized,有什么问题?锁升级过程是不可逆的,过了高峰我们还是重量级的锁,那效率是不是大打折扣了?这个时候你用Lock是不是很好?——三太子敖丙
面试:Synchronized知识点相关推荐
- 高级 Java 面试通关知识点整理
转载自 高级 Java 面试通关知识点整理 1.常用设计模式 单例模式:懒汉式.饿汉式.双重校验锁.静态加载,内部类加载.枚举类加载.保证一个类仅有一个实例,并提供一个访问它的全局访问点. 代理模式: ...
- JAVA编程多线程面试常见知识点灵魂拷问(一)
1.对线程池的了解 ThreadPoolExcutor创建线程池,包含七个参数.七个参数分别是核心线程数.最大线程数.任务队列.等待时间.时间单位.线程工厂.拒绝策略. 任务加入线程池算法流程,若加入 ...
- Java面试常见知识点总结
目录 面试常见知识点 静态代码块 代码块 构造方法之间的顺序 interface和abstract的区别 abstract能不能继承interface 反正可不可以 interface 和abstra ...
- 06-JAVA面试核心知识点整理(时间较多的同学全面复习)
JVM (1) 基本概念: JVM是可运行Java代码的假想计算机 ,包括一套字节码指令集.一组寄存器.一个栈.一个垃圾回收,堆 和 一个存储方法域.JVM 是运行在操作系统之上的,它与硬件没有直接的 ...
- 2020年Android面试高频知识点小结+9家公司面试真题
作者:小羊子说 前言 正直2020金九银十,第一次换工作或是面试候选人,我们都会对面试知识做一次总结梳理,毕竟开发技术无边界,不同人对技术的解读不同.文章总结了最近大半年中的面试考查点V1.0,希望对 ...
- Java面试核心知识点(283页)Java面试题合集最新版(485页)
阿里.腾讯两大互联网企业传来裁员消息,很多人都陷入担心,不安情绪蔓延-- 其实大家应该更冷静和理性地看待大厂裁员.每年三四月都是大厂人员调整期,这个季节是各个公司战略调整.战略规划的一个关键期,肯定会 ...
- Android工程师面试准备知识点
Android工程师面试准备知识点 听+7哥说,把下面的全弄懂,面试必过,所以我就试着去把所有题目补充了一下,各位能耐的网友们,如果有吐槽或者补充的尽管给我留言,在这里谢过大家了. 1. andr ...
- JavaScript工作面试常用知识点总结大全
JavaScript工作面试常用知识点总结大全 JS语言的构成 ECMAScript - JavaScript的核心 BOM - 浏览器对象模型 DOM - 文档对象模型 JS的引入方式 外部引入:通 ...
- C/C++面试笔试知识点总结
C/C++面试笔试知识点总结 1.const关键字的作用?(变量,参数,返回值) 2.什么是死锁? 3.造成死锁的4个必要条件? 4.如何避免死锁? 5.static关键字作用? 6.c/c++中内存 ...
- C++面试基础知识点
C++开发面试基础知识点 1. 语言基础 1.1 const的用法 1)在定义的时候必须进行初始化 2)指针可以是const 指针,也可以是指向const对象的指针 3)定义为const的形参,即在 ...
最新文章
- node--静态服务器
- ECMAScript6入门教程(一)
- python mainloop bind_Python3 tkinter基础 Frame bind 捕捉多键同时按
- jap和java有关系吗_hibernate与jpa有什么区别和联系?
- python文件处理seek()方法的参数是,在Python中操作文件之seek()方法的使用教程
- m1系统怎么重装,m1芯片怎么重装系统,苹果M1芯片重装系统,m1芯片重新安装mac
- [图:知识竞赛题库PPT制作] 为上海棒约翰餐饮管理有限公司定制的的知识竞赛题目及展示界面-PPT格式-双屏展示。
- win10杜比全景声评测_Win10安装杜比全景声音效教程
- 《遥感原理与应用》第三版——思维导图
- python怎么变白-Python将png透明变为白色并保存为jpg图片
- 台式计算机加固态硬盘,台式电脑加固态硬盘教程_固态硬盘台式机安装方法-win7之家...
- 系统架构设计方法论——IBM架构解决方案设计
- 【华为OJ】【MML命令执行结果查询】
- h0004.双倍 (10 分)
- android room详解
- 年龄到底怎么算才对_怎么算年龄才是正确的
- Python 字典(Dictionary. items()方法
- 手把手教你如何开一家生意兴隆的旅店
- 【动漫整理】好番推荐(含微量剧透)
- 使用PicGo+Gitee做图床
热门文章
- 如何用 R 语言的 Shiny 库编写 web 程序
- Git ignore UserInterfaceState.xcuserstate
- 2010.2--ip redirects 和 ip directed-broadcast含义
- Eigen教程(4)
- Java之多线程断点下载的实现
- JSTL EL 详解
- 【转载】Jquery中的$命名冲突的解决方案
- 国外大牛开发者创造出Siri第三方服务器
- 双色球机器学习线性回归蓝球预测案例
- cmd cd 无法切换目录_如何获取用户主目录?os/user 就可以了,为什么要 gohomedir...