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