Every time you interact with a process: start it, signal it, complete a work item, etc., you are using the calling thread to do it. Each of those methods will execute all the possible nodes using the current thread until it reaches a wait-state or the end of the process.
Thanks for the reply.
In jbpm3 there was an option to process a node asyncrhonously. These async nodes were picked up by some scheduled service provided by jBPM engine for processing. In jBPM5 if we do not want to block the thread starting the process, is there some task node level config that we can use? Or is it recommended that the thread starting the process itself should be in a separate thread from rest of the application (either via JMS or simple java threading).
There is not such mechanism in jbpm5 as far as I know. You can create something similar usign asynchronous work item handlers, but you still need to create the scheduler that picks up those processes.
A common practice, as you said is to communicate with process instances using a JMS queue. This way you not only have asynchronous processing, but you also gain some fail-safe features as well.