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的面试经验_摘抄
一.心态 心态很重要! 心态很重要! 心态很重要! 重要的事情说三遍,这一点我觉得是必须放到前面来讲. 找工作之前,有一点你必须清楚,就是找工作是一件看缘分的事情,不是你很牛逼,你就一定能进你想进的公 ...
随机推荐
- linux配置tns
.三个配置文件都是放在$ORACLE_HOME\network\admin目录下. .sqlnet.ora确定解析方式 .listener.ora上设SID_NAME,通常用于JDBC访问,对应的错误 ...
- App交互demo
Android <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" ...
- (转)各种排序算法的分析及java实现
转自:http://www.cnblogs.com/liuling/p/2013-7-24-01.html 排序一直以来都是让我很头疼的事,以前上<数据结构>打酱油去了,整个学期下来才勉强 ...
- CSS 宝库
Cascading Style Sheets, 层叠样式表单或者层叠样式表.简称CSS. 目的是为了表现HTML或者XML的样式. 可以做到网页内容和表现的分离.可以说,CSS是一种表现语言. h5禁 ...
- 【Struts 2】Struts2环境搭建
一.关键步骤 1.创建Java Web项目 2.引入Struts2的依赖包,将依赖包拷贝到WEB-INF/lib下 * commons-logging-1.0.4.jar * freemarker-2 ...
- 使用SurfaceView播放RGB原始视频-2016.01.22
1 程序代码 使用Android中的SurfaceView播放RGB视频数据,SufaceView播放代码如下: package com.zhoulee.surfaceviewdemo; import ...
- flask页面操作gpn接口
https://wizardforcel.gitbooks.io/flask-extension-docs/content http://cabeza.cn/blog/2016/02/28/datat ...
- WP8_定位新页面中listbox的某项
即将跳转到页面A,在页面A中有一个listbox,在跳转的时候,接收参数,自动选中listbox中的某项 /// <summary> /// 接收参数,定位当前选中项 /// </s ...
- 【qt4.8.6】qt-everywhere-opensource-src-4.8.6静态库编译,搭建vs2010 + Qt4.8.6环境
公司的电脑上无法运行QtCreator, 又想用Qt,只能搞vs2010+Qt了, 看到运行时要链接一个几M到十几M的QtCore.dll和QtGui.dll,又有一种在用C#写的程序的感觉,很不爽, ...
- 写给Node.js新手的7个小技巧
一些我更愿意在开始就知道东西 利用 Node.js 开发是一个非常有趣,和令人满足的过程, 他有3万多个模块可以选择使用,并且所有的模块可以非常容易的集成入现有的应用之中. 无论如何,对于一些刚开始使 ...