A thread in a Java program runs asynchronously as a independent path of execution. It is basically a subset of code designed to execute simultaneously in sync with other subsets of the same program. The motivation behind threading is to leverage concurrency.