Synchronized 和Reentrant Lock 有什么具体区别?


  • Global Moderator

    Q: Synchronized 和Reentrant Lock 有什么具体区别?

    A: synchronized和Reentrant Lock有很多相似点。比如都实现了互斥(Mutex),都有Reenrancy。但是还是有一些不同的。一般synchronzied都是和某个对象联系的,所一只有一个Condition variable。而Reentrant Lock可以有多个Condition。Reentrant Lcok也提供了一些高级功能,比如是否保证Fairness,是否可中断等。

    在Java 5以前,Reentrant Lock比synchronized性能要更好,但是Java 6以后,它们的性能已经接近了。



  • 还有一个语法上的区别,就是:

    A ReentrantLock is unstructured, unlike synchronized constructs – i.e. you don’t need to use a block structure for locking and can even hold a lock across methods.

    lock()unlock()可以发生在不同的methods中,这点是synchroinzed做不到的。

    private ReentrantLock lock;
    
    public void foo() {
      ...
      lock.lock();
      ...
    }
    
    public void bar() {
      ...
      lock.unlock();
      ...
    }
    

    参考:http://stackoverflow.com/a/11821900/3697757


登录后回复
 

与 BitTiger Community 的连接断开,我们正在尝试重连,请耐心等待