36. 请问什么是锁消除和锁粗化? |
(1)锁消除 所消除就是虚拟机根据一个对象是否真正存在同步情况,若不存在同步情况,则对该对象的访问无需经过加锁解锁的操作。 比如StringBuffer的append方法,因为append方法需要判断对象是否被占用,而如果代码不存在锁竞争,那么这部分的性能消耗是无意义的。于是虚拟机在即时编译的时候就会将上面的代码进行优化,也就是锁消除。 @Override public synchronized StringBuffer append(String str) { toStringCache = null; super.append(str); return this; } 从源码可以看出,append方法用了 synchronized关键字,它是线程安全的。但我们可能仅在线程内部把StringBuffer当做局部变量使用;StringBuffer仅在方法内作用域有效,不存在线程安全的问题,这时我们可以通过编译器将其优化,将锁消除,前提是Java必须运行在server模式,同时必 |
安卓面试题多线程36-40
最新推荐文章于 2024-08-26 19:43:03 发布
本文深入探讨了安卓面试中关于多线程的常见问题,包括线程的创建、同步机制、线程池的使用以及在安卓应用中的最佳实践。通过阅读,读者将能全面了解安卓环境下多线程的面试重点。
摘要由CSDN通过智能技术生成