gpt4 book ai didi

java - Java 8 中 try-with-resources block 中的锁风险

转载 作者:行者123 更新时间:2023-12-03 17:09:12 27 4
gpt4 key购买 nike

如果我这样做

try(Lock lock = lockProvider.lock()) {
// some code that doesn't use variable lock
}

编译器或 JITer 是否存在删除锁定创建的风险,因为它认为它在 block 内未使用?


稍后编辑:

一些上下文。我来自 .NET 背景,在 C# 中,允许执行以下操作:

using(Transaction tx = BeginTransaction())
{
// code that does things without touching the tx variable, such as SQL connections and stuff
}

事实上它甚至可以缩短为

using(BeginTransaction())
{
// code that does things without touching the tx variable, such as SQL connections and stuff
}

静态编译器和 JIT 编译器将保持 BeginTransaction 调用,并且在运行时它总是会发生。

但是在 Java 中似乎存在很多问题并且 negativity将 try-with-resources 用于其他资源。

最佳答案

不,不存在锁被优化掉的风险,至少假设它的 lock()close() 方法实际上不是空操作,但是执行同步操作。

"negativity"你引用的不是正确性,而是按预期方式使用工具,以及当你使用 AutoCloseable 违背该意图时,其他工具(如静态分析器)如何给你误导性指导。

顺便说一下,如果您这样做,我建议您将包装器称为 Lock 以外的名称,以避免与 java.util.concurrent.Lock 混淆。

关于java - Java 8 中 try-with-resources block 中的锁风险,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49156569/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com