java等待状态锁释放吗_java – 该方法如何等待锁被释放?

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

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吗?

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值