如何在Java中实现基于actor的并发?

时间:2016-08-04 14:59:08

标签: java asynchronous

我需要在我的应用程序中使用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模型?同步是否过度杀伤?

0 个答案:

没有答案