A thread is a path of code that is run at the same time as your main program. Having multiple threads allows you to take advantage of multi-core processors by running two or more different things at once.

While the above idea is simple, it's nuanced with a LOT of ugly "gotchas". Sharing data between threads is very tricky and demands you be very careful or else you get ugly hard-to-find bugs.