我在每个博客或解释中都看到了 Locks API 相对于同步的优势。
我想知道同步比锁有什么优势,或者我应该更喜欢同步而不是锁的任何场景。
最佳答案
您是指同步语句和方法关键字吗?隐式锁定的主要优点是需要更少的代码并在离开其范围时自动解锁。对于简单的锁定/等待操作,它是完美的解决方案。
所以下面的代码
public void myMethod() {
synchronized(this) {
// concurrent stuff
}
}
完全等同于
final private Lock lock = new ReentrantLock();
public void myMethod() {
lock.lock();
try {
// concurrent stuff
}
finally {
lock.unlock();
}
}
和
synchronized public void myMethod() {
// concurrent stuff
}
您还可以使用不同的对象进行同步(它们不会受到任何影响,只是控制点):
final static private Object sync = new Object();
public void method1() {
synchronized(sync) {
// concurrent code involving static members
}
}
public void method2() {
synchronized(this) {
// concurrent code affecting this instance
}
}
关于java - 同步相对于锁 API 的优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31364307/