If you don't specify the "async=true", the calling thead (your app thread that calls the activiti API) will be used to make the process flow. if one of the 4 paths cause an error during this flow, the whole transaction is rolled back and the calling thread gets an Exception. It's up to your app to handle it than.
If you use "async=true" on the subprocesses, they will be executed asynchronously. The calling thread will return immediately, and the only way of knowing something went wrong is to check the process afterwards. Indeed, failed jobs will be available in the job-table. In case you retry the job, only the failed execution will be retried again.
On top of that, only WHEN ALL of the 4 async executions have succeeded (either instantly or after retry), the process will continue with the steps after this.