By default, all threads you create are eligable for execution on all cores of all CPUs. However, as your threads aren't the only threads in the computer, these cores are not available 100% of the time for your threads. Hence, the scheduler will give your threads a fair slice of avilable CPU power.
Since your threads can run everywhere , you will never encounter the situation that a core is doing nothing while your thread is waiting for another core to become available. And if you have 4 runnable threads on a 4 core machine, that means all cores will be busy. Note: a thread is not always runnable, e.g. if it's waiting on I/O.