Why does 'extends Thread' exist, when 'implements Runnable' is winner in all cases [duplicate] Why does 'extends Thread' exist, when 'implements Runnable' is winner in all cases [duplicate] multithreading multithreading

Why does 'extends Thread' exist, when 'implements Runnable' is winner in all cases [duplicate]


Because sometimes (almost never, but sometimes) you want to be able to change the basic behaviour of Thread.

That's when you'll need to extend it.

You can change it by overriding a method from the Thread class, you can't do it by implementing one from Runnable.


In the last 20+ years since Java 1.0 was released, what is a considered a good design pattern has changed. However, Java is committed to backward compatibility which means old code which might use poor design patterns will still work.

One of my pet hates is StringBuffer for which it was never a good idea to make it's method synchronized, was replaced more than tens years ago, but unfortunately developers are not prevented from using it today and even new developers use it, even though it was deprecated long before they started using Java.