In the example shown below, the first fork-join spawns two threads, waits for them to finish and then spawns another two threads from second fork-join. In this case FJ1 and FJ2 happen in a sequential manner. However behavior will change if you change the first fork-join to a fork-join_none. In that case Threads 1 and 2 will run in the background and in the meanwhile the second fork-join will get executed. This will fork Thread3 and Thread4 and ultimately you get 4 threads running in the background.