For simplicity's sake, we'll be using an Action Sequence similar to the "Basic Multi-threading" example shown above.
Since we're using Unity, we'll be starting at the beginning of the Start() function (Line 11). First things first, we're going to create the second thread ("T2") and tell it what action it'll be performing when it starts (in this case, A2). We then tell T2 to start working.
It may seem a bit odd to start A2 before A1, but there's a good reason behind this. When you create additional threads (T2 in this case) you should make sure the other threads are able to start working as soon as possible; It's like telling everyone else to start on their work so you can get your own work done too.
Now that T2 has gotten to work, let's get to work on the Main thread. We tell the Main thread - which can also be thought of as the default thread - to perform A1 while Thread #2 is performing A2.
What's just been done demonstrates the core idea of parallelism we've been touching on throughout the exercise: We've got two threads, running in parallel, performing two different tasks at the same time.
Because A3 is reliant on both A1 and A2 to have been completed we need a way of making sure both of those are done. Once Main has finished A1, we tell it to Join() (i.e., "wait for") our second thread.
If you call Join() on a thread that is already done with its work, Join() may seemingly appear to do nothing. On the contrary, it has already finished with its waiting as there is simply nothing to wait on.
A3 now executes on the Main thread and the rest is rather straightforward from there; The action sequence is now finished and has successfully ran using multi-threading.