Java锁定结构最佳模式

标签 java multithreading

从技术角度来看,这两个 list 有何不同?第一个是 lock 的 Java 文档中提供的一个.第二个是我的。

1.

 Lock l = ...;
         l.lock();
         try {
             // access the resource protected by this lock
         } finally {
             l.unlock();
         }

2.

Lock l = ...;

     try {
         l.lock();
         // access the resource protected by this lock
     } finally {
         l.unlock();
     }

最佳答案

原因在the javadoc of the .unlock() documentation of Lock中找到:

Implementation Considerations

A Lock implementation will usually impose restrictions on which thread can release a lock (typically only the holder of the lock can release it) and may throw an (unchecked) exception if the restriction is violated. Any restrictions and the exception type must be documented by that Lock implementation.

类似地,.lock() 可能因未经检查的异常而失败。

这意味着:

l.lock();
try {
    ...
} finally {
    l.unlock();
}

如果锁定 失败,您将永远无法unlock()。而在:

try {
    l.lock();
    ...
} finally {
    lock.unlock();
}

如果锁定失败,你不必抛出两个异常;其中一个会丢失。

更不用说根据锁的实现,使用第二个版本你可能最终会解锁“其他人”的锁......这不是一件好事。

关于Java锁定结构最佳模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31058681/

相关文章:

objective-c - 具有非线程安全 CIFilter 的多线程

c - 调用 pthread_cond_signal(...) 然后调用 pthread_cond_wait(...) 会唤醒服务员吗?

java - spring 2.5.6 @Controller 不适用于 JBOSS 7

java - 来自现有 RDD 的 Spark Streaming

java - 使用java使用godaddy帐户发送电子邮件

java - Spring Cloud Config-属性解密在客户端不起作用

multithreading - 芯片多处理和对称多处理之间的区别?

.net - 如果我启动了5个以上的线程,VB.NET应用程序将在服务器上崩溃。

c++ - 在 Qt 的线程中设置小部件标签文本

java - Java 是否会阻止重写静态方法?