Что произойдет, если использовать run() вместо start() потока?

Следующий класс потока работает нормально. Я могу понять его процесс. Затем я изменил

mc.srart() в mc.run(), но ничего не изменилось и ошибок не было.

Может кто-нибудь, пожалуйста, объясните мне это? можем ли мы всегда использовать run() вместо start()?

public class Main {

    public static void main(String[] args) {

        Myclass mc = new Myclass();
        mc.start();
    }
}

class Myclass extends Thread {
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.print(i + "--");
        }
    }
}

person DSM    schedule 26.01.2015    source источник
comment
t.start() — это метод, который библиотека предоставляет вашему коду для вызова, чтобы запустить новый поток. run() — это метод, который ваш код предоставляет библиотеке для вызова в новом потоке. Метод run() определяет, что будет делать поток.   -  person Solomon Slow    schedule 26.01.2015


Ответы (1)


Вызов run непосредственно на объекте Thread лишает смысла наличие Thread в первую очередь.

Если вы вызываете run, то run будет выполняться в текущем Thread, как обычный метод. Вы должны вызвать метод start на Thread, чтобы run выполнить в другом Thread.

Заставляет этот поток начать выполнение; виртуальная машина Java вызывает метод run этого потока.

person rgettman    schedule 26.01.2015