hot*_*zst 6 java multithreading synchronization
我有一个类似于这样的类:
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这个类进行一些昂贵的(按时间)计算并获得锁定.当锁定被保持时,没有人可以检索将由计算更新的数据,因此实际上它们必须等待计算完成.实际计算是在一个单独的线程中完成的.如果我有以下代码:
ExpensiveCalculation calculation = ...
calculation.calculate();
Object data = calculation.getData();
Run Code Online (Sandbox Code Playgroud)
在计算完成之前,将阻止检索数据的调用.在这一点上等待的确切意味着什么?
我知道,对于这个例子,我可以使用Callable和Future,但这是重点.有没有办法改进这样的代码,以确保没有浪费时间资源(如不必要的线程切换)?
是否是忙碌的等待
不。
等待线程是否让步,以便其他线程(例如执行计算的线程)可以继续进行。
不,它会阻塞,以便其他线程可以运行。
等待线程是否进入睡眠状态?
它被阻止了。
等待/通知是否在幕后调用?
不。
| 归档时间: |
|
| 查看次数: |
522 次 |
| 最近记录: |