采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,锁粗化那段也用的StringBuffer的例子,这里JIT编译不会进行锁消除的原因是因为copyString100Times的返回值是sb.toString吗? 这里的sb也是局部变量(本地变量),即使有返回值,各个线程之间也不会共享到sb吧,不共享为什么不进行锁消除?那么锁消除的条件具体是哪些呢? 望老师解答o(~~)o
同学好,抱歉这里锁粗化的例子举得不是很贴切,
StringBuffer sb = new StringBuffer();
这个StringBuffer应该也设置成静态的成员变量,才会出现锁粗化,毕竟 copyString100Times 这个方法所有线程调用返回值都是一样的。
然后锁消除的条件具体得看JIT,一般它会判断是否是局部变量,即会分析不加锁和加锁执行的结果如果是一致的话,才能进行锁消除。
非常感谢!
老师好,为什么StringBuffer设置成成静态的成员变量,就会出现锁粗化了呢?
因为可能会被多个线程共享,所以得加锁,而又不需要反复加锁,所以会粗化
登录后可查看更多问答,登录/注册
招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航
1.8k 27
2.7k 22
1.2k 15
1.4k 14
1.3k 14