[英]can synchronized at method level be replaced by Lock?
在编写线程安全类时,我们在代码的两个位置使用了synchronized
关键字,
1.方法级同步
2.同步块
就我所能想到的,像Lock
( java.util.concurrent.locks.Lock
)这样的接口只能在块级而不是方法级用于synchronized
。 还是有办法吗?
我不具备任何真正的需要,但杳无音讯的讨论,只是古董Lock
可换货的synchronized
。
public class SampleClass {
public synchronized void method(){
.....
}
}
“ synchronized
方法”没有特殊的语法“在方法的开头获取Lock,然后在最后释放它”。
当然,您可以自己做:
public void method() {
lock.lock();
try {
// rest of the method
} finally {
lock.unlock();
}
}
众所周知
public class SampleClass {
public synchronized void method(){
.....
}
}
和
public class SampleClass {
public void method(){
synchronized(this) {
.....
}
}
}
对于所有实际目的都是等效的。
因此,您需要将方法同步更改为等效的块同步,然后可以将其替换为Lock
不,没有办法做到这一点,因为java.util.concurrent
因此Lock
或任何其他实现)只是一个库,而synchronized
是Java Language Specification的一部分 。
关于“ Lock
可以替代同步”,Brian Goetz在“ Java并发实践”第13.4章中对此进行了讨论:
ReentrantLock
是用于内部锁定不实际的情况的高级工具。 如果需要高级功能,请使用它:定时,轮询或可中断的锁获取,公平队列或非块结构锁。 否则,建议同步。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.