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的面试经验_摘抄
一.心态 心态很重要! 心态很重要! 心态很重要! 重要的事情说三遍,这一点我觉得是必须放到前面来讲. 找工作之前,有一点你必须清楚,就是找工作是一件看缘分的事情,不是你很牛逼,你就一定能进你想进的公 ...
随机推荐
- rsync安装使用
安装 yum install rsync mkdir /etc/rsyncd cd /etc/rsyncd vi rsyncd.conf pid file = /var/run/rsyncd.pid ...
- 洛谷P1461 海明码 Hamming Codes
P1461 海明码 Hamming Codes 98通过 120提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 暂时没有讨论 题目描述 给出 N,B 和 ...
- dedecms后台登录如何去除验证码设置
dedecms后台验证有时间输入总是不对,有时候却不显示,而输入验证码无疑是一个麻烦的过程,那么我们怎么样来去除后台验证码,实现输入帐号密码直接登录呢?我来为大家介绍一下: 让人感到烦恼的情况出现了! ...
- leetcode 100
100. Same Tree Given two binary trees, write a function to check if they are equal or not. Two binar ...
- jQuery源码的几篇文章
http://lingyu.wang/#/post/2014/5/8/read-jq-src-1 http://lingyu.wang/#/post/2014/5/10/read-jq-src-2 h ...
- 旅游风景展示应用源码iPad版
一款iPad旅游风景展示应用源码,一款iPad旅游景区展示应用.效果很炫,左右可以以书本的效果进行翻页,双击左边显示该风景区的信息,双击右边可以显示该风景区的地理位置.<ignore_js_op ...
- VS2013添加NuGet的方法
1.工具->扩展和更新->联机 2.右上角搜索框搜索NuGet,选择NuGet Package Manager for Visual Studio 2013,安装后重启VS 下面通过添加N ...
- 如何在某个按钮上触发 bootstarp Modal 组件
<?php Modal::begin([ 'id'=>'myModal', 'header' => '<h2>标题</h2>']); echo '内容'; M ...
- Winform登录、控制软件只运行一次、回车登录
Winform登录对很多程序猿来说都有些困惑,登录进入主窗体后要销毁登录窗体,而不是隐藏哦,怎么实现呢? 先贴一段Program.cs的代码 static void Main() { Mutex mu ...
- Java基本开发环境搭建(适合第一次使用)
Java基本开发环境搭建(适合第一次使用) 编写人:cc 阿爸 2013-10-17 一.开发工具获取 1.开发工具包JDK l 下载地址: 到ORACLE公司官方网站(http://www.ora ...