java - lock.lock() 尝试前

标签 java locking java.util.concurrent

<分区>

有什么区别:

private Lock lock = new ReentrantLock(true);

public void getIn (int direction) throws InterruptedException {

     lock.lock();
     try {
         ...

...

public void getIn (int direction) throws InterruptedException {

      try {
          lock.lock();
          ...

编译顺利,程序运行正常(我的意思是相同的输出)

我应该把 lock.lock();尝试之前还是之后?...

感谢您的帮助

最佳答案

假设 lockReentrantLock , 那么它就没有真正的区别,因为 lock()不会抛出任何已检查的异常。

但是,Java 文档在 ReentrantLock 示例中将 lock() 留在了 try block 之外。这样做的原因是 lock() 中的未检查 异常不应导致错误地调用 unlock()。在所有事物的 lock() 中存在未经检查的异常时,是否需要关注正确性,这完全是另一个讨论。

一般来说,保持像 try block 这样的东西尽可能细粒度是一个很好的编码习惯。

关于java - lock.lock() 尝试前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10868423/

相关文章:

java - 将 protobuf 消息转换为 Java 中的字符串以实现持久性

java - 是否可以在javascript中直接调用Pubsub的订阅拉取,而不是调用java方法来获取数据?

java - java 中的 Log4j 日志级别

java - 如何确定单个 Java 执行器服务中管道中的所有任务何时完成

java - 获取和释放 java 监视器锁(同步块(synchronized block)、可重入锁等)是否需要上下文切换到内核空间?

java - Selenium:强制测试人员在参数的特定值之间进行选择

c# - 在 .NET 中使用 Interlocked 类进行多线程处理的正确方法

java - JTable中的并发问题

memory - 如何锁定非特权用户的内存?

java - ConcurrentHashMap 有什么缺点吗?