t.start()
это метод, который библиотека предоставляет для вашего кода для вызова, когда вы хотите новый поток.
r.run()
это метод, который вы предоставляете для библиотеки для вызова в новом потоке.
Большинство из этих ответов пропустить большую картину, которая заключается в том, насколько языке Java обеспокоен, нет больше разницы между t.start()
и r.run()
чем между любыми двумя другими методами.
Они оба просто методы. Они оба бегут в теме, которая их назвала . Они оба делают то, что им было запрограммировано, и затем оба возвращаются, все еще в том же потоке, к своим абонентам.
Самым большим отличием является то, что большая часть кода t.start()
является нативным кодом, в то время как в большинстве случаев код r.run()
будет чисто Java. Но это не большая разница. Код есть код. Родной код труднее найти и труднее понять, когда вы его найдете, но он все еще просто код, который говорит компьютеру, что делать.
Итак, что же t.start()
делать?
Он создает новый собственный поток, организует вызов этого потока t.run()
, а затем сообщает ОС, чтобы новый поток работал. Тогда это возвращается.
А что делает r.run()
?
Самое смешное, что тот, кто задает этот вопрос, тот, кто его написал . r.run()
делает то, что вы (т.е. разработчик, который написал это) разработал для этого.