The house analogy is excellent for getting across the concept of synchronization,
but it falls down in one major area.
In our house, we had many threads running simultaneously.
However in a single-processor system, only one thing can run at once.
Single CPU
Let's look at what happens in the real world, and specifically, the economy case where we have one CPU in the system. In this case, since there's only one CPU present, only one thread can run at any given point in time. The kernel decides (using a number of rules, which we'll see shortly) which thread to run, and runs it.
Multiple CPU (SMP)
If you buy a system that has multiple, identical CPUs all sharing memory and devices, you have an SMP box (SMP stands for Symmetrical Multi Processor, with the symmetrical part indicating that all the CPUs in the system are identical). In this case, the number of threads that can run concurrently (simultaneously) is limited by the number of CPUs. (In reality, this was the case with the single-processor box too!) Since each processor can execute only one thread at a time, with multiple processors, multiple threads can execute simultaneously.
The kernel as arbiter
So who decides which thread is going to run at any given instant in time? That's the kernel's job.
Kernel states
We've been talking about running,ready, and blocked loosely—let's now formalize these thread states.