我需要在我的应用程序中使用CRUD逻辑的动作和actor。我正在遵循一个体系结构文档,该文档将action
定义为同步部分,将actor
定义为异步部分,这是有意义的。但是,将数据写回文件的actor只有在动作成功完成时才需要执行自己的操作。例如,如果条目成功更新,则将数据写回。如果条目未成功更新,则不要将数据写回。我想在演员的action.execute
函数中调用execute()
:
public void execute() {
if(action.execute()) {
executeAsynchronously();
}
}
但是,这似乎并不适合演员模型。作为更多背景,我有一个管理所有条目和数据的经理类。该类中有add()
,delete()
和update()
个方法,每个方法都有:
public void addEntry(UserkEntry entryModel, boolean notify) {
assert entryModel != null;
synchronized (this) {
AddEntryAction action = new AddEntryAction();
UserDirectoryActor actor = new UserDirectoryActor(action);
addActor(actor);
actor.execute();
}
}
我添加演员的方法:
protected final synchronized void addActor(UserDirectoryActor actor) throws BusinessException {
for(UserDirectoryActor act : actors) {
if(act.equals(actor)) {
UserServiceFw.log.error("Actor for " + act.getAction() + " already exists");
throw new BusinessException("UserDirectoryActor could not be added for: " + act.getAction());
}
}
actors.add(actor);
}
如何修改代码以更好地适应actor模型?同步是否过度杀伤?