Há duas maneiras de se criar um thread, ou criando uma classe que estende Thread ou criando uma classe que implementa Runnable. A segunda opção é mais recomendada em uma perspectiva POO. Você só vai querer estender uma Thread quando desejar uma classe que tenha um comportamento específico relacionado às threads. Quando deseja apenas que uma tarefa seja executada concorrentemente, implemente Runnable. Em ambos os casos, vai precisar de um objeto Thread para iniciar a execução da sua tarefa em um novo thread.
Seja a classe MyThread uma extensão de Thread e seja a classe MyRunnable uma implementação de Runnable, então, para iniciar a execução concorrente, fazemos:
Thread p = new MyThread();
p.start();
Runnable r = new MyRunnable();
Thread p = new Thread(r);
p.start();