A Thread is a means to Async and Parallel programming. The real question is what is the difference between Async and Parallel programming.
Here's a blog[
^] that explains it pretty well.
Here's the short of it:
Both Async and Parallel programming are methods to run code without blocking your UI (or main) thread
When you're programming Async you execute code on a different thread which prevents the UI from becoming unresponsive.
When you're doing Parallel programming you're doing multiple things at the same time. For example, you want to read all the files in a single folder on your file system. You could spawn a new thread for each file, which is theoretically faster than reading one file after another.
To illustrate the difference, in Async programming you could have the files being read one after another (so not parallel), but still do this on a different thread, so your UI stays responsive.
Also notice that the two are not mutually exclusive. You could spawn a thread to read the files (Async) and then read an x amount of files at the same time (Parallel).
I hope that clears things up for you :)