【发布时间】:2019-09-08 04:39:04
【问题描述】:
我正在编写一些代码,在其中创建一个 HikariDataSource 作为惰性值。我确实应用了 LazyThreadSafetyMode.SYNCHRONIZED 模式,所以我很困惑为什么当我启动一个读取该值的新线程时会进行两次初始化
// in module database
val dataSource: HikariDataSource by lazy(LazyThreadSafetyMode.SYNCHRONIZED) {
HikariDataSource(dataSourceConfig(databaseConfig))
}
fun initDatabase() {
dataSource.connect().let { //do stuff}
}
// in main module
fun main() {
initDatabase()
thread {
dataSource.connect().let { // initializes a new data source... }
}
}
我希望 HikariDataSource 被初始化一次,但由于某种原因它被调用了两次...... 我认为我将该变量暴露给另一个 gradle 项目的事实可能会影响它,但不知道为什么..
【问题讨论】: