请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

rs = new Resource()重排序;效率

  1. rs = new Resource();过程中编译器可能会对其进行重排序导致构造方法的一些初始化工作未执行完毕但对象不为null导致后续线程获取锁后可以操作该对象发生一些问题,那我们在实际开发过程中什么时候应该考虑重排序问题呢?毕竟原子性的操作就基本类型的赋值和引用赋值
  2. 下面这两种加锁方式,第一种当第一个线程拿到锁后后面的线程都在外面,第二种可以同时进入到if里面等待获取锁是因为锁的范围小所以效率高吗,老师可以详细说下为什么第二种效率高点吗

图片描述图片描述

正在回答

1回答

  1. 非并发情况下,不需要考虑。如果是并发情况,需要利用加锁、用volatile等手段进行保护,这是最安全的。当然,通常情况下,虽然这不是JVM的规范,担任商用JVM会智能判断,并不会让重排序影响到程序的正确性。

  2. 第二种写法,只有第一次新建Singleton的时候需要多个线程之间等待,后面大家是可以并行的。第一种写法,永远不能并行,所以效率低。

0 回复 有任何疑惑可以回复我~
  • 提问者 Mr_tang_ #1
    罪过,没有详细看,新建Singleton后第一个if不会进来就不会涉及到加锁
    回复 有任何疑惑可以回复我~ 2019-12-18 22:12:25
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信