sychronized面试问题浅析
先说下面试吧,整体来说基础准备好点,简历别太假,然后回答起来实事求是,表现自然的点基本上都没问题吧(针对初级职位,记得有个hr说过对于新人基础扎实和为人真诚是最关键的),两天时间跑起来挺累,反而觉得面试时挺轻松的。
一、sychronized相关
这个很常见,面试基本上都会问到多线程这一块,而多线程重点则是同步这一块,所以sychronized基本上必问。对于sychronized的一般用法,大家都知道,无非就是修饰方法和修饰代码块的区别,以及类、对象、静态方法同步时的一些常见问题,这里不再赘述,如不清楚可参考下边链接。但是对于如下的问题,你是否能搞清楚呢?
1、sychronized都可以同步什么?
sychronized基本用法就是修饰方法和代码块,但是面试官说类、对象、方法、代码块都可以。这一点让我很迷惑,因为我从来没见过sychronized可以修饰类和对象的。再回去的路上我突然注意到,他问的是同步,而不是修饰,这样一想,他的问题就一下在明了了,看如下代码就明白了:
//一、修饰方法
public synchronized void test1() {
XXX...;
} //二、修饰代码块
//1、同步类
synchronized(Object.getClass()){
} //2、同步对象
synchronized(Object){
} //3、常规的同步代码块,但是其实当所处方法为普通方法时,this就是当前对象;为静态方法时,this是当前类
synchronized(this){
}
2、 sychronized同步代码块和同步对象有什么不同?
其实这个应该是问上边代码中二.2和二.3有什么不同(当所处方法为静态的时,为 二.1和二.3),其实对于 sychronized而言,两者处理是一样的,不同之处在于一个是当前对象,一个是其他对象。
首先,我们来分析下sychronized(Object)到底有什么作用。 sychronized(Object)在执行时会尝试获取Object的对象锁,而这回产生两个作用:1、一个对象内的同步代码(方法)只有获取对象锁的线程才能执行,否则就会被阻塞。2、只有获取对象锁的线程可以进入sychronized(Object){}中的代码块{}。这样来看。两者的区别就很明显了(假设当前对象为A,同步Object为B):
- 当B为this(A=B=this)时,只有获取A锁的线程可以执行sychronized代码块,同时其他线程在调用A内其他同步块时同样会被阻塞。
- 当B为其他对象时,只有获取B锁的线程可以执行sychronized代码块,同时其他线程可以调用A内其他同步块(同步锁不为B的锁),并且其他所有需要获取B锁的同步块将会被阻塞。
总感觉还是没说明白,如果不清楚可以自行查资料,这一块用着看似简单,但是其实道道挺多的。此外感觉这两个问题还是很有水平的,能够很容易区分你是否真的对多线程有很多经验,一般情况下我们简单的使用很难注意到这些细节。
sychronized面试问题浅析的更多相关文章
- iOS面试_1.浅析内存管理
为了开学的面试,就在博客里总结一下面试会问到的问题,今天就来谈谈内存管理,看到一篇文章非常不错,http://vinceyuan.cnblogs.com/,深入浅出,推荐大家去看看! Objectiv ...
- 面试作业之浅析京东促销活动核心模型 - DDD
前言 京东作为中国最大的自营式B2C电商平台,提供一站式综合性购物,服务亿万家庭,涵盖3C.家电.消费品.服饰.家居家装.生鲜和新通路(B2B),满足了消费者的多元化需求.每天都会发布相关的促销活动, ...
- 攻略前端面试官(一):JS的数据类型和内存机制浅析
原文地址:http://rainykane.cn/2019/09/29/与K_K君一起攻略前端面试官(一):JS的数据类型和内存机制浅析/ 背就完事了 介绍:一些知识点相关的面试题和答案 使用姿势:看 ...
- Python面试题目之深浅拷贝浅析
# copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. **只是简单的指针赋值 # copy.deepcopy 深拷贝 拷贝对象及其子对象 **指针赋值,且内容拷贝 用一个简单的例 ...
- Python面试题目之Python的复制和赋值浅析
python采用的是引用变量的结构,也就说如果你对一个变量赋值,并不是给这个变量开辟了一块内存空间而是将一个对象的内存空间地址告诉了这个变量,这样做的好处是便于管理,节省内存空间,便于内存释放等等.但 ...
- 2019Java常见面试上
一.开场白简单的介绍一下自己的工作经历与职责,在校或者工作中主要的工作内容,主要负责的内容:(你的信息一清二白的写在简历上,能答出来的最好写在上面,模棱两可不是很清楚的最好不要写,否则会被问的很尴尬) ...
- Java面试(1)
一.Java基础 什么是字符串常量池? Java中的字符串常量池(String Pool)是存储在Java堆内存中的字符串池: String是java中比较特殊的类,我们可以使用new运算符创建Str ...
- 面试HashMap你都扛不住,还想拿到offer?
当我们面试Java开发岗位时,面试官问的频率出现最多的问题,就是这个HashMap,不管是传统型公司还是互联公司,HashMap是必问的,所以作者爆肝整理了HashMap的23个问题以及答案,请查收! ...
- BAT的面试经验_摘抄
一.心态 心态很重要! 心态很重要! 心态很重要! 重要的事情说三遍,这一点我觉得是必须放到前面来讲. 找工作之前,有一点你必须清楚,就是找工作是一件看缘分的事情,不是你很牛逼,你就一定能进你想进的公 ...
随机推荐
- 智能指针(一):STL auto_ptr实现原理
智能指针实际上是一个类(class),里面封装了一个指针.它的用处是啥呢? 指针与内存 说到指针自然涉及到内存.我们如果是在堆栈(stack)中分配了内存,用完后由系统去负责释放.如果是自定义类型,就 ...
- (笔记)angular material 选项卡用法
- 【UEditor】远程上传图片到【七牛云存储】
杂谈:最近在玩一个第三方的微信开发平台,里面的图片都是上传到[七牛云存储]的,用了一下非常的好用,支持各种语言,SDK齐全.支持全分布式系统架构以及存储技术和数据加速,于是决定将网站的图片都存储到七牛 ...
- .NET Web开发总结(三)
第五章 ASP.NET 页面语法 本章详细讲解.NET页面的语法结构 一般情况下 一个ASP.NET页面要包括页面编译指令 HTML页面框架及Web窗体 服务器端控件 服务器端代码 ...
- CentOS学习笔记—软件管理程序RPM、YUM
软件管理程序 Linux的软件安装分为源代码编译安装和打包安装.RPM是一种打包安装方式,是由 Red Hat 这家公司开发出来的,后来实在很好用,因此很多 distributions 就使用这个机制 ...
- python centos上出现上下键和退格键均为乱码
出现此问题主要是由于未安装readline,可以使用python自带的readline,具体设置方式为: 1.cd /Python-2.7.9 (下载包后的路径)2../configure3.vim ...
- 导入Excel的时候使用TransactionScope事务控制来进行数据
最近,项目需要将Excel里面的数据导入到数据库里面,但是由于Excel里面的数据的合法性和数据格式的不确定性.所以不可能每读出一条数据,就保存到数据库中. 这就使用到了TransactionScop ...
- POJ C程序设计进阶 编程题#1:计算矩阵边缘之和
编程题#1:计算矩阵边缘元素之和 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB ...
- Windows 2008 R2 X64 安装WebsitePanel(WSP虚拟主机管理面板)
Windows 2008 R2 X64 安装WebsitePanel(WSP2.0虚拟主机管理面板) 估计很多同学都还不知道WebsitePanel是什么东东吧,Web ...
- Check for Data Duplicates on a Grid
Here is a piece of code to prevent duplicate data on a specific field on a page grid. You can of cou ...