Application domains form an isolation, unloading, and security boundary for managed code. Threads are the operating system construct used by the common language runtime to execute code. At run time, all managed code is loaded into an application ___domain and is run by a particular operating system thread.
There is not a one-to-one correlation between application domains and threads. Several threads can be executing in a single application ___domain at any given time and a particular thread is not confined to a single application ___domain. That is, threads are free to cross application ___domain boundaries; a new thread is not created for each application ___domain.
At any given time, every thread is executing in one application ___domain. The run time keeps track of which threads are running in which application domains. You can locate the ___domain in which a thread is executing at any time by calling the Thread.GetDomain method.