【问题标题】:Releasing a "synchronized" lock释放“同步”锁
【发布时间】:2011-05-04 08:52:02
【问题描述】:

使用synchronized 可以实现类似的功能,还是我需要使用java.util...Lock

public void outer() {
 synchronized(lock) {
  inner();
 }
}

public void inner() {
 thing1();
 release(lock) {
  result = doLongNetworkRequest();
 }
 thing2(result);
}

【问题讨论】:

  • 请使用try-finally(正确)。 / 你确定要这样构造你的代码吗?
  • @Tom Hawtin:是的,我在处理锁时总是使用finally。结构是这样的,因为实际上我有很多内部方法,并且出于 DRY 原因锁定在outer

标签: java multithreading synchronization locking


【解决方案1】:

您可以使用java.util.concurrent.locks。他们有lock()unlock()

【讨论】:

  • 这个答案通过一个例子会提供更多信息。你能提供一个吗?
【解决方案2】:

很遗憾,您无法释放同步块期间持有的监视器。您将不得不使用一两个锁来做您想做的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 2014-06-07
    • 2013-09-09
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    相关资源
    最近更新 更多