Instantiating from a class that implements Runnable is not enough to create a Thread object. You still to create a Thread object need to invoke a Thread constructor passing to it this Runnable object. Therefore invoking start() on a Runnable object is incorrect and causes compilation error.