You should know
Java can only inherit (extend) one class, while can implement multiple interfaces. Runnable is an interface. So base on this alone, the "implements Runnable" is the preferred choice.
Furthermore, the "extends Thread" creates its own unique instance variables every time, while "implements Runnable" does not.
A more detailed explanation with example
here