当前位置:  开发笔记 > 编程语言 > 正文

该方法如何等待锁定被释放?

如何解决《该方法如何等待锁定被释放?》经验,为你挑选了0个好方法。

我有一个类似于这样的类:

public class ExpensiveCalculation {
  private Executor threadExecutor = ...
  private Object lock = new Object();

  private Object data = null;

  public Object getData() {
    synchronized(lock) {
      return data;
    }
  }

  pulic void calculate() {
    executor.execute(() -> internalCalculation());
  }
  private void internalCalculation() {
    synchronized(lock) {
      // do some long running calculation that in the end updates data
      data = new Object();
    }
  }
}

这个类进行一些昂贵的(按时间)计算并获得锁定.当锁定被保持时,没有人可以检索将由计算更新的数据,因此实际上它们必须等待计算完成.实际计算是在一个单独的线程中完成的.如果我有以下代码:

ExpensiveCalculation calculation = ...
calculation.calculate();
Object data = calculation.getData();

在计算完成之前,将阻止检索数据的调用.在这一点上等待的确切意味着什么?

这是一个忙碌的等待

等待线程是否会产生,因此其他线程(如进行计算的线程)可以继续.

等待线程是否会进入睡眠状态?

在场景后面调用wait/notify吗?

我知道,对于这个例子,我可以使用CallableFuture,但这是重点.有没有办法改进这样的代码,以确保没有浪费时间资源(如不必要的线程切换)?

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有