在 Java 中使用纯 lock() 方法是一种不好的做法吗?
Is it a bad practice to use pure lock() method in Java?
void lock()
Acquires the lock.
If the lock is not available then the current thread becomes disabled for thread scheduling purposes and lies dormant until the lock has been acquired.
我几乎在任何地方都使用定时 tryLock,处理所有预期的事情 - 如果超时结束,如果它被中断,等等。
但是今天,我想:是bad/unsafe/dangerous使用纯锁()吗?
示例显示它看起来如此可爱和优雅 - 最后只需锁定和解锁。我用谷歌搜索过,但没有找到关于这是一种不良做法的答案。
好坏无话可说。如果需要处理临界块,需要加锁。
这取决于您如何在代码中使用它。如果您只是使用它,仅用于锁定和解锁,那么您不会使用它提供的任何功能。因此,您只能使用关键字 synchronized 回退到内部锁。但是,如果您使用定时锁和可中断锁定设施,那么考虑到您的特定用例保证它可能是合理的。与显式锁相比,内部锁仍然具有显着的优势。符号是熟悉和紧凑的。通常,开发人员忘记在显式锁定上调用 unlock,从而更容易出错。
此外,如果您使用条件对象,您仍然可以使用它们中的任何一个。如果锁对象只有一个条件,我宁愿使用内部锁。当您需要对给定锁有多个条件并且需要在不受同一锁上其他条件的任何干扰的情况下使用它时,显式锁会变得很方便。
总而言之,这完全取决于您如何使用它以及您的用例是否需要它。
void lock()
Acquires the lock.
If the lock is not available then the current thread becomes disabled for thread scheduling purposes and lies dormant until the lock has been acquired.
我几乎在任何地方都使用定时 tryLock,处理所有预期的事情 - 如果超时结束,如果它被中断,等等。
但是今天,我想:是bad/unsafe/dangerous使用纯锁()吗?
示例显示它看起来如此可爱和优雅 - 最后只需锁定和解锁。我用谷歌搜索过,但没有找到关于这是一种不良做法的答案。
好坏无话可说。如果需要处理临界块,需要加锁。
这取决于您如何在代码中使用它。如果您只是使用它,仅用于锁定和解锁,那么您不会使用它提供的任何功能。因此,您只能使用关键字 synchronized 回退到内部锁。但是,如果您使用定时锁和可中断锁定设施,那么考虑到您的特定用例保证它可能是合理的。与显式锁相比,内部锁仍然具有显着的优势。符号是熟悉和紧凑的。通常,开发人员忘记在显式锁定上调用 unlock,从而更容易出错。
此外,如果您使用条件对象,您仍然可以使用它们中的任何一个。如果锁对象只有一个条件,我宁愿使用内部锁。当您需要对给定锁有多个条件并且需要在不受同一锁上其他条件的任何干扰的情况下使用它时,显式锁会变得很方便。
总而言之,这完全取决于您如何使用它以及您的用例是否需要它。