t.start()
це метод, який надає бібліотека для вашого коду для виклику, коли потрібно новий потік.
r.run()
це метод, який ви надаєте бібліотеці для виклику в новому потоці.
Більшість із цих відповідей пропускають велику картину, яка полягає в тому, що, що стосується мови Java, то між різними іншими методами немає різниці t.start()
і r.run()
більше.
Вони обоє просто методи. Вони обоє бігають у нитку, яка їх викликала . Вони обидва роблять все, що їм було закодовано, і тоді вони обидва повертаються, все ще в одній нитці, до своїх абонентів.
Найбільша відмінність полягає в тому, що більшість коду для t.start()
- це нативний код, а в більшості випадків код для r.run()
чистого Java. Але це не велика різниця. Код - код. Рідний код важче знайти, і складніше зрозуміти, коли його знайдеш, але все одно просто код підказує комп'ютеру, що робити.
Отже, що робить t.start()
?
Він створює новий власний потік, він упорядковує виклик цього потоку t.run()
, а потім повідомляє ОС відпустити новий потік. Потім вона повертається.
І що робить r.run()
?
Найсмішніше, що людина, яка задає це запитання, - це людина, яка її написала . r.run()
робить все, що ви (тобто розробник, який це написав) створив для цього.