## Why is this an issue?

The semantics of `Thread` and `Runnable` are different, and while it is technically correct to use `Thread` where a `Runnable` is expected, it is a bad practice to do so.

The crux of the issue is that `Thread` is a larger concept than `Runnable`. A `Runnable` represents a task. A `Thread` represents a task and its execution management (ie: how it should behave when started, stopped, resumed, …​). It is both a task and a lifecycle management.

### Noncompliant code example

    public static void main(String[] args) {
    	Thread runnable = new Thread() {
    		@Override
    		public void run() { /* ... */ }
    	};
    	new Thread(runnable).start();  // Noncompliant
    }

### Compliant solution

    public static void main(String[] args) {
    	Runnable runnable = new Runnable() {
    		@Override
    		public void run() { /* ... */ }
    	};
    	new Thread(runnable).start();
    }