首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >方法级别的同步是否可以被Lock替换?

方法级别的同步是否可以被Lock替换?
EN

Stack Overflow用户
提问于 2016-10-11 17:23:49
回答 3查看 378关注 0票数 0

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

1.方法级同步

2.同步块

据我所知,像Lock (java.util.concurrent.locks.Lock)这样的接口只能在块级代替synchronized,而不能在方法级别使用。还是有办法?

我没有任何真正的需要,但只是好奇,因为听说Lock可以取代synchronized

代码语言:javascript
复制
public class SampleClass {
    public synchronized void method(){
      .....
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-11 17:30:12

没有特殊的语法用于“在方法开始时获取锁,并在结束时释放它”,就像对于synchronized一样。

当然,你可以自己做:

代码语言:javascript
复制
public void method() {
    lock.lock();
    try {
        // rest of the method
    } finally {
        lock.unlock();
    }
}
票数 3
EN

Stack Overflow用户

发布于 2016-10-11 17:31:20

我们都知道

代码语言:javascript
复制
public class SampleClass {
    public synchronized void method(){
      .....
    }
}

代码语言:javascript
复制
public class SampleClass {
    public void method(){
        synchronized(this) {
           .....
        }
    }
}

在所有实际用途上都是同等的。

因此,您需要将方法同步更改为等效的块同步,而后者可以由Lock替换。

票数 1
EN

Stack Overflow用户

发布于 2016-10-11 19:02:06

不,没有办法做到这一点,因为java.util.concurrent-and因此Lock或任何其他实现也只是一个库,而synchronizedJava语言规范的一部分。

关于"Lock可以替代同步“,Brian在"Java并发在实践中“第13.4章中讨论了这一点:

ReentrantLock是一种高级工具,用于处理内部锁定不实用的情况。如果您需要它的高级功能,可以使用它:定时、轮询或可中断锁获取、公平排队或非块结构锁定。否则,更喜欢同步。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39983070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档