哪位大神帮我解答一个synchronized的面试题

qq_29448025 2016-12-21 10:49:04


下面两种写法中为什么 写法1 的对象锁的使用效率高?




...全文
451 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_23890415 2017-04-19
  • 打赏
  • 举报
回复
刚学的,我个人理解, 按图1中的代码顺序执行方法A,一个线程获取到了锁对象lock,这个对象的对象头会和当前线程关联会成为一个偏入锁, 当前线程在执行方法B的时候,由于lock对象是算偏入锁,不用cas指令就可直接进入方法B。 之后再执行方法C,和上面就是一个意思了 而图2中如果顺序执行A后再执行B,当前线程是需要获取锁对象再释放锁对象的,lock和lock2对象不能算偏入锁,导致在高并发的情况下,效率会低于图1的方式
qq_35100747 2016-12-22
  • 打赏
  • 举报
回复
楼主的意思是不是这样 ABCD 4个人去买票,A和B要买X票,C和D要买Y票 买一张票要5分钟 第一种方法就是 AB来到火车站X售票口买X票 排队等,同时CD来到火车站Y售票口买Y票 排队等, 第二种方法就是 AC来到火车站,A买X票 C买Y票,BD来了 不还得是去他们后面排队等 各个线程互不干扰 和先后顺序没关系
huleo729 2016-12-22
  • 打赏
  • 举报
回复
方法二不是会有线程安全问题?存在两个线程同时处理同一对象? 个人理解,希望大神解惑
  • 打赏
  • 举报
回复
synchronized 锁住的是对象。 不知道这个信息是否有帮助
soton_dolphin 2016-12-22
  • 打赏
  • 举报
回复
我理解是两个不同的方法对同一个对象进行操作用同一把锁不需要做释放锁和等待其他对象解锁并获取锁的过程,所以比较有效率
bcsflilong 2016-12-22
  • 打赏
  • 举报
回复
我完全迷茫啊 帮你顶一下
爱睡觉的阿狸 2016-12-22
  • 打赏
  • 举报
回复
我总觉得还有代码没贴全的样子
qq_29448025 2016-12-22
  • 打赏
  • 举报
回复
我当时想的,o1,o2若不是独占资源,那就没必要加锁了。也不知道这样想是不是出题人的意思。
soton_dolphin 2016-12-22
  • 打赏
  • 举报
回复
引用 7 楼 qq_29448025 的回复:
说实话,我拿到这题,也蒙了。当时,我是这么写的,不知道对不对: 实际应用中,一般情况下,o1,o2分别代表两个独占资源。o1在任何情况下,应只允许被一个线程进行访问;o2在任何情况下,也应只允许被一个线程进行访问,但o1、o2两者之间没有相互制约的关系,都可以同时被线程访问。写法1很好的做到了这一点。 反观写法2,有以下两个方面的不足: 1)o1资源有可能同时被两个线程访问,破坏了其独占性。 2)o1与o2资源在某些情况下,形成了相互制约的关系。如线程1要调用methodA去访问资源o1、而线程2要调用methodC去访问资源o2,这两个线程就不能同时进行。
我觉得靠谱
qq_29448025 2016-12-22
  • 打赏
  • 举报
回复
说实话,我拿到这题,也蒙了。当时,我是这么写的,不知道对不对: 实际应用中,一般情况下,o1,o2分别代表两个独占资源。o1在任何情况下,应只允许被一个线程进行访问;o2在任何情况下,也应只允许被一个线程进行访问,但o1、o2两者之间没有相互制约的关系,都可以同时被线程访问。写法1很好的做到了这一点。 反观写法2,有以下两个方面的不足: 1)o1资源有可能同时被两个线程访问,破坏了其独占性。 2)o1与o2资源在某些情况下,形成了相互制约的关系。如线程1要调用methodA去访问资源o1、而线程2要调用methodC去访问资源o2,这两个线程就不能同时进行。

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧