,直到每个分支都进入等待状态
抽象的说,会从流程图执行深度优先搜索,如果每个分支都遇到等待状态,就会返回
等待状态是稍后需要执行任务,Activiti会把当前状态保存到数据库中,然后等待下一次触发
触发可能来自外部...,就是定时器(2),然后它会返回给调用者(3),并提交事务(如果事务是由Activiti开启的)
有时需要自定义控制流程中事务的边界,把业务逻辑包裹在一起.这就需要使用异步执行:
完成了用户任务...,异步执行的作用是让开始流程监听器运行在一个单独的线程或者事务中
排他任务
从Activiti 5.9开始 ,JobExecutor能保证同一个流程实例中的Job不会并发执行
排他任务的产生背景
一个并行网关...就是说,对每个到达并行汇聚的分支,都需要判断是继续还是等待其他分支的一个或多个分支
为什么会产生这样的问题:
因为服务任务配置成使用异步执行,可能相关的job都在同一时间被获取,被JobExecutor...会保证无论什么时候获取一个流程实例的排他任务,都会把同一个流程实例的其他任务都取出来,放在同一个工作线程中执行.保证job是顺序执行的
从activiti 5.9开始,排他任务已经是默认配置.所以异步执行和定时器事件默认都是排他任务