- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
让我们想象下一段 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
block 充当条件 block ,但您可以确定它会在 while
block 之前执行一次。
我已经在 Java 中实现了这个相同的 block ,但我没有收到错误。这是 Kotlin 的设计/实现错误吗?还是有充分的理由这样做?
最佳答案
synchronized
只是一个内联函数,编译器不知道 lambda 是否会执行一次,甚至根本不会执行。惯用的方法是从 lambda 返回值并将其分配给本地:
val results =
synchronized(preparedStatement) {
preparedStatement.clearParameters()
preparedStatement.setInt(1,value1);
preparedStatement.setInt(2,value2)
preparedStatement.executeQuery()
}
关于thread-safety - Kotlin: "synchronized"使编译器不确定变量的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36246511/
我正在构建一个 Flutter 应用程序,我需要使用 flutter_redux用于我的全局状态管理的包。 不幸的是,当我添加它并尝试执行我的应用程序时,出现以下错误: Error: Cannot r
我有一个包含多个异步目标的 NLog 配置文件 ( )。其中一个目标是日志文件。 我知道NLOG is thread-safe , 但它能保证来自同一线程的消息按照它们的生成顺序写入日志文件吗? 最
寻找一个线程安全的随机生成器,我发现了一个mersenne twister生成器类,如果线程安全的话,作者会说该类: http://www.umiacs.umd.edu/~yangcj/mtrnd.h
我有一些并行的 Fortran90 代码,其中每个线程都需要生成相同的随机数序列。 我有一个随机数生成器,它似乎是线程不安全的,因为对于给定的种子,每次运行程序时我完全无法重复相同的结果。 我没有成功
我今天参加了面试,面试官问了我以下问题: 重入互斥线程安全吗?你能解释一下为什么吗? 我对并发编程比较陌生,无法回答..但我说...... 互斥是线程安全的。但是重入不是,这就是我们有重入锁的原因。
我正在与 Manning 的 Idris 一起进行类型驱动的开发。给出了一个示例,该示例教授如何将函数限制为一组类型中的给定类型。我们有 Vehicle使用 PowerSource 的类型即 Peda
我的理解是,这意味着人们可以编写一个程序来正式证明用静态类型语言编写的程序将没有某个(小)缺陷子集。 我的问题如下: 假设我们有两种图灵完备语言,A 和 B。假定 A 是“类型安全的”,而假定“B”不
我一直在为ARM设计嵌入式操作系统,但是即使提到ARMARM和linux源代码,也有些关于架构的事情我还是不了解。 原子操作。 ARM ARM说,“加载”和“存储”指令是原子的,并且保证在中断处理程序
另外,一个是否意味着另一个? 最佳答案 What is the difference between a strongly typed language and a statically typed
Redis 如何处理多个线程(来自不同的客户端)更新 Redis 中的相同数据结构?对于这种用例,推荐的最佳做法是什么? 最佳答案 如果你在某个时候读过 Little redis 书,这句话就会出现。
我刚刚观察并确认 Go 闭包通过引用捕获外部变量。如果变量被捕获到一个 Goroutine 中,并且如果 Goroutine 多路复用到不同的线程中, 修改闭包中的值安全吗? 如果它不安全,为什么 G
1.概述 转载:Spring 中的Null-Safety 之前一直在某些代码中看到过使用@Nullable 标注过的注释,当时也没有在意到底是什么意思,所以这篇文章来谈谈Spring中关于Null的那
我正在构建我的 Flutter 应用程序的模型类。我以前构建过很多 Flutter 应用程序,但这是我第一次接触 Flutter 2.0。我的类(class)如下所示。 import 'package
问题 我想检查 R 中的函数工厂是否“安全”。这里的“安全”意味着工厂创建的函数的结果仅取决于它们的参数,而不取决于全局变量。 描述 这是一个不安全的工厂: funfac_bad = function
enter image description here Okhttp 使用 OkHttpClent 发送请求。 我可以使用相同的 OkHttpClent 实例在不同的线程中请求吗? 最佳答案 是的。
Hunspell 拼写库线程安全吗? 最佳答案 答案是不, 一个简单的多线程测试应用程序显示 Hunspell 使用每个实例的资源进行拼写过程,因此任何时候只有一个线程可以使用它 - 使用锁/工作队列
我有以下问题。我们在托管在同一 GlassFish 服务器上的两个项目中使用 log4j。每个项目都有内部 log4j.properties 文件,该文件指向基于不同目录的文件(让我们将它们命名为 P
我正在尝试自动编写一个特征以对sub进行线程安全。这就是我得到的: #| A trait to ensure that a sub is not run on multiple threads sim
请注意,我使用的是 Python,但这可能适用于 glib 的任何其他绑定(bind)。 我有一个类通过 glib.io_add_watch() 和一个名为 foo() 的回调方法设置多个套接字连接。
我有一个关于类型安全的简单问题 我定义了这个方法和一个类变量: private List listBait = null; public List getListBait() { // Cac
我是一名优秀的程序员,十分优秀!