關(guān)于kotlin大家應(yīng)該都很熟悉了稠肘,至少都是聽說過了
那么在kotlin下的同步鎖也就是synchronized 大家都了解嗎
且看下方代碼有何區(qū)別福铅,功能是否一致
fun test(){
synchronized(AA::class){//①
}
synchronized(AA::class.java){//②
}
}
①與② 有何區(qū)別,通過AS我們?nèi)ゲ榭匆幌缕渥止?jié)碼
代碼塊①字節(jié)碼如下
LINENUMBER 17 L8
LDC Lcom/zqc/structure/AA;.class
INVOKESTATIC kotlin/jvm/internal/Reflection.getOrCreateKotlinClass (Ljava/lang/Class;)Lkotlin/reflect/KClass;
ASTORE 1
L9
ICONST_0
ISTORE 2
L10
ICONST_0
ISTORE 3
L11
ALOAD 1
MONITORENTER
L0
NOP
L12
L13
ICONST_0
ISTORE 4
L14
代碼塊②字節(jié)碼如下
LINENUMBER 20 L19
LDC Lcom/zqc/structure/AA;.class
ASTORE 1
L20
ICONST_0
ISTORE 2
L21
ICONST_0
ISTORE 3
L22
ALOAD 1
MONITORENTER
L4
NOP
L23
L24
ICONST_0
ISTORE 4
L25
對比發(fā)現(xiàn)①比②多出了 INVOKESTATIC kotlin/jvm/internal/Reflection.getOrCreateKotlinClass (Ljava/lang/Class;)Lkotlin/reflect/KClass;
有什么作用呢项阴,找到getOrCreateKotlinClass 方法看一下
Reflection.java
public static KClass getOrCreateKotlinClass(Class javaClass) {
//調(diào)用ReflectionFactory 的getOrCreateKotlinClass方法
return factory.getOrCreateKotlinClass(javaClass);
}
ReflectionFactory ,java
public KClass getOrCreateKotlinClass(Class javaClass) {
//創(chuàng)建一個新的class對象
return new ClassReference(javaClass);
}
到這二者區(qū)別就很明朗了
代碼塊①是不能起到同步鎖作用的滑黔,因為每次調(diào)用它都會生成一個新的對象
如果覺得本篇文章對你有用,就順手點個贊吧