如果我做
try(Lock lock = lockProvider.lock()) {
// some code that doesn't use variable lock
}
编译器或 JITer 是否存在删除锁创建的风险,因为它认为它在块内未使用?
后期编辑:
一点上下文。我来自 .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 中,使用 try-with-resources 处理其他资源似乎存在很多问题和消极情绪。