Зачем нам нужен Runnable для запуска потоков? - PullRequest
5 голосов
/ 18 мая 2011

Почему нам нужно передавать работающий экземпляр при создании потоков с использованием интерфейса Runnable?

Ответы [ 2 ]

5 голосов
/ 18 мая 2011

Причина, по которой нам нужно передать работающий объект в конструктор объекта потока, заключается в том, что поток должен иметь какой-то способ добраться до метода 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() нашего запускаемого объекта.

4 голосов
/ 18 мая 2011

Что вы хотите от нового потока? Вы, вероятно, хотите, чтобы он выполнял некоторый код. Но какой код должен запускаться? Вы не можете просто поместить код в поток. И у Java нет указателей на функции. Маленькая хитрость для решения этой проблемы - использовать объект, который реализует функцию. Эта функция run. Итак, объект должен иметь метод run. Это то, что делает интерфейс Runnable, убедитесь, что у него есть метод run. Таким образом, если мы даем объект Runnable, поток знает, что делать!

...