threading is a general concept that's not specific to any kind of development
and it depends on what you mean when you ask "how this happens?" there are many ways to answer it, from the most naive, language-level explanation to the more complex, system-level explanation
there isn't typically a class that teaches concurrent programming as a standalone subject. it's usually addressed in courses that require it -- i.e. distributed computing, operating systems, and so forth... although you ought to see or have seen some topics about it in a software engineering course (which usually covers things like locking, semaphores, and basic parallel program concepts)