Я пытался выяснить причины выхода следующей программы Java:Неожиданный выход. Пожалуйста, объясните
public class Main {
public static void main(String args[]) {
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println("Implementation");
}
};
MyThread gaurav = new MyThread(r);
new Thread(r).start();
gaurav.start();
}
}
class MyThread extends Thread {
Runnable runnable;
public MyThread(Runnable r) {
runnable = r;
}
@Override
public void run() {
super.run();
System.out.println("Thread");
}
}
Выход для выше: «Реализация» с последующим «Тема» в следующей строке. Теперь проблема заключается в этом утверждении:
gaurav.start();
Как я прошел работоспособный г к MyThread, я думал, что г будет получить выполнены, следовательно, выходной сигнал будет «Реализация» для этого тоже. Но ясно, что я что-то упускаю. Также разница между утверждениями:
new Thread(r).start();
gaurav.start();
для этого сценария было бы действительно полезно. Благодарю.
Вы только помещаете 'runnable' в поле в' MyThread', нигде вы его не запускаете. Вот почему это не выводит ничего как часть 'MyThread'. Вы также не можете передавать «Runnable» в 'MyThread' в отношении вывода. –
Спасибо, я понял. Но до сих пор не получилось объяснять, почему я получил голоса, даже когда я много раз пробовал этот вопрос перед публикацией здесь. –
Сообщество stackoverflow @gauravjain собрало много таких «не тратьте время на чтение вопросов, читайте только те слова», и они предположили, что вы смущены порядком исполнения, и это было задано раньше. Они участвуют в гонках за получение ответа. – mostruash