当同时调用完成activiti任务时,TaskListener对完成任务的运行次数超过一次

时间:2016-04-18 07:02:12

标签: java concurrency activiti

当我同时调用完整方法时,PostpareTaskListener.notify执行3次,如何在执行notify方法之前只执行一次,另外2次执行Thorw异常?

public static void main(String args[]){     
    Logger log = LoggerFactory.getLogger("");

    final ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

    new Thread(new Runnable() {

        @Override
        public void run() {
            processEngine.getTaskService().complete("141209", null);

        }
    }).start();

    new Thread(new Runnable() {

        @Override
        public void run() {
            processEngine.getTaskService().complete("141209", null);

        }
    }).start();

    processEngine.getTaskService().complete("141209", null);
}


public class PostpareTaskListener implements TaskListener{
    @Override
    public void notify(DelegateTask task) {
        // TODO Auto-generated method stub

        task.setVariable("result", "false");

        System.out.println("================post pare ================");

    }
}

1 个答案:

答案 0 :(得分:0)

也许你可以通过以下方式获得任务状态:

task.isSuspended();

毕竟,如果您尝试完成已完成的任务,我希望activit会抛出异常:

org.activiti.engine.ActivitiObjectNotFoundException: Cannot find task with id 141209

设置变量可能会有所帮助:

Boolean executed = (Boolean) task.getVariable("executed");
if (executed) {
    return;
}
task.setVariable("executed", true);