首页 > 解决方案 > 了解 Java 中的锁用法

问题描述

我试图了解 Java 中同步和锁之间的区别,但我发现了另一个我仍然不完全理解的问题: Java 中可重入锁中同步(对象)的等价物是什么?

特别是我不明白为什么 lock.lock() 被写在 try 块之外。

据我了解,锁是在方法体内部使用的,lock.lock() 是作为 try 块中的第一件事编写的,以确保一次只有一个线程可以执行该 try 块中的内容,直到锁被解锁使用 lock.unlock() 调用,它写在 try 块之后的 finally 块中。

但是如果 lock.lock() 在方法体之外和块之外被调用,那是什么意思呢?

标签: javasynchronizationlocks

解决方案


try-finally 构造是为了保证锁会被释放。

'lock' 写在 'try' 之前的原因是,在锁定完成之前,没有什么可以解锁 - 所以有一个 finally 子句无条件解锁可能没有被锁定的东西是一个错误。


推荐阅读