Использование создания потока путем расширения класса потока

Возможный дубликат:
Java: реализует Runnable и расширяет Тема

Java предоставляет два варианта создания класса Thread: либо путем реализации Runnable, либо путем расширения класса Thread.

Я знаю, что может быть много причин для реализации Runnable, но не уверен, где будет сценарий расширения класса Thread для создания собственного класса Thread?

Не могли бы вы предоставить мне сценарии, в которых расширение Thread кажется возможным или лучшим вариантом или выгодным...

В потоках был Вопрос, но это не отвечай на мой вопрос


person Satya    schedule 17.06.2012    source источник


Ответы (2)


Практически нет причин для расширения Thread, в основном единственная причина, по которой вы хотели бы расширить поток, - это если вы собираетесь переопределить что-то, кроме run(), что, как правило, является плохой идеей. Причина, по которой расширение Thread менее распространено, заключается в том, что тогда класс не может расширять что-либо еще, и если вы только переопределяете метод run(), то было бы бессмысленно расширять Thread, а не реализовывать Runnable.

person John    schedule 17.06.2012

Runnable — это интерфейс с одним методом run() который должен быть реализован классом, реализующим интерфейс.

e.g.

public class MyRunnable implements Runnable {
    @Override
    public void run() {
        //...
    }
}

MyRunnable не является Thread, и вы не можете создать новый поток, просто используя этот класс. Так что не совсем имеет смысл говорить -

Java предоставляет два варианта создания класса Thread, т. е. либо путем реализации Runnable...

Вы можете расширить класс Thread, но, как сказал @John, в этом нет никакого смысла.

Но если вы хотите выполнить какой-то код в новом потоке, то лучший способ -

MyRunnable r = new MyRunnable();
Thread t = new Thread(r);
t.start();

Метод t.start() запускает новый поток и вызывает метод run() для r (который является экземпляром MyRunnable.

person Bhesh Gurung    schedule 17.06.2012
comment
Я действительно знаю эту концепцию создания потока, но хотел знать, где я на самом деле создаю поток, расширяя класс, а не реализуя интерфейс;) - person Satya; 18.06.2012