繁体   English   中英

可以在方法级别同步被Lock代替吗?

[英]can synchronized at method level be replaced by Lock?

在编写线程安全类时,我们在代码的两个位置使用了synchronized关键字,

1.方法级同步

2.同步块

就我所能想到的,像Lockjava.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或任何其他实现)只是一个库,而synchronizedJava Language Specification的一部分

关于“ Lock可以替代同步”,Brian Goetz在“ Java并发实践”第13.4章中对此进行了讨论:

ReentrantLock是用于内部锁定不实际的情况的高级工具。 如果需要高级功能,请使用它:定时,轮询或可中断的锁获取,公平队列或非块结构锁。 否则,建议同步。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM