To run work in parallel you need a thread, and Java gives two ways to make one: extend Thread or pass a Runnable task. Prefer Runnable, because it keeps your class free to extend something else and the same task can later run on an ExecutorService. Always start a thread with start(); calling run() directly just runs the code on the current thread. That start() versus run() trap is a very common interview question.