Интерфейс Runnable содержит только один метод: метод run()
. Класс Thread
на самом деле
реализует интерфейс Runnable
.
Следовательно, когда вы наследуете от класса Thread, ваш подкласс также реализует интерфейс Runnable.
Вот пример, как все это происходит:
import java.applet.Applet;
public class OurApplet extends Applet {
public void init() {
Runnable ot = new OurClass();
Thread th = new Thread(ot);
th.start();
}
}
Вызывается метод нового объекта start()
, чтобы начать выполнение нового потока управления.
Причина, по которой нам нужно передать работающий объект в конструктор объекта потока, заключается в том, что поток должен иметь какой-то способ добраться до метода run()
, который мы хотим, чтобы поток выполнялся. Поскольку мы больше не переопределяем метод run()
класса Thread, выполняется метод по умолчанию run()
класса Thread,
этот метод run () по умолчанию выглядит следующим образом:
public void run() {
if (target != null) {
target.run();
}
}
Здесь target
- это исполняемый объект, который мы передали конструктору потока. Таким образом, поток начинает выполнение с run()
метода класса Thread, который немедленно вызывает метод run()
нашего запускаемого объекта.