繁体   English   中英

执行方法时如何锁定实例

[英]How to lock an instance when a method is being executed

我不知道这个问题是否多余,但是我在寻找了2个小时后才找到答案...

我正在尝试制作一个使用多个线程和一个类的共享实例的程序。 当调用此实例上的某个方法时,我们将其称为“重新连接”,其他方法调用应等待直到“重新连接”执行完毕。 我该如何实现?

只是:

synchronized (this) { //////// }

要么:

public ReentrantLock lock = new ReentrantLock();

public void reconnect() {

    lock.lock();

    ////

    lock.unlock();

}

对不起,如果已经问过了。 谢谢阅读。

加法1:

注释中提到了这一点,当执行除“重新连接”以外的方法并调用“重新连接”时,“重新连接”应等待,直到其他所有方法都执行完毕。

取决于程序的复杂性。 第一个足以完成非常基本的任务。 后者(锁定对象)是适用于更高级任务的高级并发对象的一部分。 与隐式锁相比,Lock对象的最大优点是它们能够回避获取锁的企图。

在Java版本5.0之前,只有第一个选项(或等效的synchronized方法修饰符)可用。 第二个选项在5.0和更高版本中可用。

如果正确使用,则两者是等效的(第二个示例应使用try-finally块进行扩展)

第一种方法的缺点是您只能使用一个条件变量,否则使用起来会更方便(更不会出错)。

如果要多个条件变量,则必须使用第二种形式。

暂无
暂无

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

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