Почему метод run не вызывается? - PullRequest
1 голос
/ 17 апреля 2011
package threadwork;

public class WorkingWithThreads implements Runnable {

    public static void main(String[] args) {
        WorkingWithThreads wwt = new WorkingWithThreads();
    }

    public WorkingWithThreads() {
        System.out.println("Creating Thread");
        Thread t = new Thread();
        System.out.println("Starting Thread");
        t.start();
    }

    @Override
    public void run() {
        System.out.println("Thread Running");

        for (int i = 0; i < 5; i++) {
            System.out.println("Thread:" + i);
            try {
                Thread.sleep(1);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

Когда я запускаю этот код, он печатает Создание потока и Запуск потока. Но не печатает Thread Running, это означает, что функция run вообще не вызывается. Почему это так?

Ответы [ 2 ]

2 голосов
/ 17 апреля 2011

Вы должны вызвать start() в потоке, чтобы запустить его; например,

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

Если бы вы расширяли Thread, вы бы создали новый поток и назовите start() на нем следующим образом:

new MyThread().start();

Поскольку вы не расширяете Thread, но ваш класс реализует Runnable:

new Thread(new WorkingWithThreads()).start();
0 голосов
/ 17 апреля 2011

Если бы я был на вашем месте, я бы запустил нить внутри main, например:

public static void main(String[] args) {
  WorkingWithThreads wwt = new WorkingWithThreads();
  System.out.println("Creating Thread");
  Thread tzero = new Thread(wwt);
  System.out.println("Starting thread");
  tzero.start();
}

Оставив конструктор для WorkingWithThreads пусто:

public WorkingWithThreads() {
  System.out.println("Creating Runnable");
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...