首页 > 编程语言 >JAVA面试题

JAVA面试题

时间:2022-11-28 16:23:41浏览次数:38  
标签:面试题 JAVA 竞争 线程 轻量级 自旋 重量级 偏向

1 Synchronized锁升级的原理

答:Synchronized在jdk1.6之前是通过重量级锁的方式实现。重量级锁底层是通过Mutex Lock来实现互斥锁的一个功能,Mutex是系统方法,调用的时候用户需要切换到内核状态执行。
       在jdk1.6版本之后,增加了锁的升级机制。线程访问synchronized同步代码块时,根据线程的竞争情况在不加重量级锁的情况下,引入了偏向锁和轻量级锁(自旋锁)。
偏向锁 - 当前的锁偏向于某个线程,通过CAS机制来修改偏向锁的一个标记,这种锁适合同一个线程多次去申请同一个锁资源的情况,并没有其他线程竞争的一个场景中。
轻量级锁 - 基于自适应自旋的机制,通过多次自旋去重试竞争锁。
如果有线程竞争锁资源,首先会使用偏向锁方式去竞争锁资源,如果能拿到锁就表示加锁成功。如果失败,说明当前已经有其他线程占用了偏用锁,就需要将锁升级到轻量级锁。竞争锁的线程会根据自适应自旋次数,去尝试占用锁资源,如果没有成功,就再升级到重量级锁,在重量级锁状态下,没有竞争到锁的线程状态就阻塞(Blocked),就需要等待锁的释放再执行。
另外可以使用乐观锁版本链,来解决多个并行事务的竞争问题。

2 反射的优缺点

答:动态的获取对象的成员变量,属性,方法。
java.lang.reflect(construct,field,methhod)
优点:可以在运行的过程中动态对类进行修改和操作。提高代码的利用率,比如动态代理。在运行时获取任意一个类的方法,属性,并且通过反射进行动态调用。
缺点:反射会涉及动态类型的解析,所以JVM无法对这些代码进行优化。代码可读性会下降,会破坏代码的抽象性。

 

标签:面试题,JAVA,竞争,线程,轻量级,自旋,重量级,偏向
From: https://www.cnblogs.com/ningshare/p/16932495.html

相关文章