Tag: 线程安全

Kotlin:“synchronized”使编译器不能确定变量的初始化

让我们设想下一个Kotlin代码,它通过一个JDBC连接器对数据库执行一些查询: var results : ResultSet preparedStatement.clearParameters() preparedStatement.setInt(1,value1); preparedStatement.setInt(2,value2) results = preparedStatement.executeQuery() while(results.next()) { // parse results } 编译没有问题。 但是,当我尝试添加线程安全性以访问preparedStatement时: var results : ResultSet synchronized(preparedStatement) { preparedStatement.clearParameters() preparedStatement.setInt(1,value1); preparedStatement.setInt(2,value2) results = preparedStatement.executeQuery() } while(results.next()) { // parse results } …我得到了一个“变量”结果“必须初始化” 。 看起来synchronized块作为一个条件块,但你可以肯定它会在while块之前执行一次。 我已经在Java中实现了这个相同的块,我没有得到错误。 这是Kotlin的设计/实现错误吗? 还是有一个很好的理由来表达呢?

Kotlin的单身人士是否安全?

Kotlin单身人士(更具体地说是对象声明)是否是线程安全的? 如果不是,在Kotlin中编写线程安全单例的最佳做法是什么? 我猜想他们是,但是我一直没能在文档中找到任何明确的声明。