== 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 [source,java,diff-id=1,diff-type=noncompliant] ---- public static void main(String[] args) { Thread runnable = new Thread() { @Override public void run() { /* ... */ } }; new Thread(runnable).start(); // Noncompliant } ---- === Compliant solution [source,java,diff-id=1,diff-type=compliant] ---- public static void main(String[] args) { Runnable runnable = new Runnable() { @Override public void run() { /* ... */ } }; new Thread(runnable).start(); } ---- ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) === Message * Argument n is a "Thread". * "XXX" is a "Thread". ''' == Comments And Links (visible only on this page) === on 20 Jan 2015, 16:20:05 Ann Campbell wrote: \[~nicolas.peru] I'd like to add a simile to illustrate the issue. What do you think of this? ____ It would be something like asking Sir Edmund Hillary to take a hike up the nearest hill with you. ____ endif::env-github,rspecator-view[]