Kotlin 的懶加載本身是線程安全的,因?yàn)樗褂昧穗p重檢查鎖定(Double-Checked Locking)模式。這種模式可以確保在多線程環(huán)境下,只有當(dāng)實(shí)例真正被創(chuàng)建時(shí),才會(huì)進(jìn)行同步。
以下是一個(gè)使用 Kotlin 實(shí)現(xiàn)的線程安全懶加載示例:
class Singleton {
private var instance: Singleton? = null
fun getInstance(): Singleton {
if (instance == null) {
synchronized(this) {
if (instance == null) {
instance = Singleton()
}
}
}
return instance!!
}
}
在這個(gè)示例中,我們使用了雙重檢查鎖定模式來確保 instance
只會(huì)被創(chuàng)建一次。當(dāng)?shù)谝淮握{(diào)用 getInstance()
方法時(shí),會(huì)進(jìn)入同步塊并檢查 instance
是否為 null
。如果為 null
,則創(chuàng)建一個(gè)新的 Singleton
實(shí)例。由于同步塊的存在,即使在多線程環(huán)境下,也只會(huì)創(chuàng)建一個(gè)實(shí)例。后續(xù)的調(diào)用將直接返回已創(chuàng)建的實(shí)例,而無需進(jìn)入同步塊。
因此,Kotlin 的懶加載在多線程環(huán)境下是線程安全的。