Benefits of public modifier on Java Thread's run()

concurrency, java, multithreading

Solution

`Thread` implements `Runnable`, which defines the `run()` method, so it has to be public.

But since Java 1.5 is advisable to use the Executors services instead of `java.lang.Thread`. Executors are decoupling the unit of work to be executed (`Runnable`, `Callable`) from the actual executor. (With `Thread` they were the same thing)

Problem

Does anyone have any insight into the history of Java Thread class's run() method being public? Almost all the time, it gets used by overriding and thus would the protected modifier have been more appropriate? That would still leave the start() as the public api for users and thus not leave any room for mistakes with users calling run() accidentally.

Original source