A "thread" is a stream of instructions from a certain program. The OS bundles instructions in threads so that it can effectively simulate multitasking (i.e. running 2 programs at once). The CPU basically processes one thread, then switches to another thread. By doing this very fast, it can simulate the illusion that it's running 2 programs at the same time. However, due to x86's poor parallel nature, sometimes all the instructions in a thread can't fully max out the processor's resources. Sometimes the processor is left idle due to data dependencies, etc. This is what hyperthreading hopes to alleviate. If the instructions in one thread can't max out the processor's resources, it takes instructions from another thread and fills in the "holes" that aren't being used on the processor, effectively not only doing more than 1 program at a time (better for multitasking) but also more efficiently using the processor's resources.
"We are Microsoft, resistance is futile." - Bill Gates, 2015.