【发布时间】:2014-09-29 20:02:54
【问题描述】:
我有一个通过网络接收请求的 RMI 控制器。该控制器将责任委托给 akka actor,该 actor 稍后会与一组工作人员联系以解决代数运算。
下面的代码是否足以确保我的 akka 主角色 (masterActor) 将接收并正确响应来自 RMI 为向我的控制器的每个请求创建的每个线程的所有请求?我的意思是, Patterns.ask 和 Await.result 线程安全吗?他们有办法通过互斥访问 masterActor 引用吗?或者我需要在我的控制器中创建一个关键部分?
Class MyController extends ... {
/* ... */
ActorRef masterActor;
/* ... */
public <O extends AlgebraOp<R>, R extends Equation & Resolved> R resolve(
Equation AlgebraOp, Context context){
EquationAndContext message = new EquationAndContext(AlgebraOp, context);
Future<R> future = (Future<R>) Patterns.ask(masterActor, message, timeout);
R operationResolved = null;
boolean timeoutExpired = false;
while(!timeoutExpired) {
try {
operationResolved = (R) Await.result(future, timeout.duration());
timeoutExpired = true;
} catch (Exception timeExpired) {
/* Re-build the future for next try */
future = (Future<R>) Patterns.ask(masterActor, message, timeout);
}
}
return operationResolved;
}
}
干杯
【问题讨论】:
标签: java multithreading akka