Actually, what other ways are available apart from extending the Thread class and implementing the Runnable interface?
The preferred way of starting threads in Java 6 is using Executors:
ExecutorService es = Executors.newCachedThreadPool(); Runnable r = ; es.execute(r);