Мы обсуждали, что потоки Java обычно создаются с использованием одного из двух методов: (1) Расширение класса потока. (2) Реализация Runnable
В обоих подходах мы переопределяем функцию run (), но запускаем поток, вызывая функцию start (). Так почему бы нам напрямую не вызвать функцию oveerridden run ()? Почему всегда вызывается функция запуска для выполнения потока?
Что происходит, когда вызывается функция?
При вызове функции выполняются следующие операции:
- Аргументы оцениваются.
- Новый кадр стека помещается в стек вызовов.
- Параметры инициализированы.
- Тело метода выполнено.
- Значение восстанавливается и текущий кадр стека извлекается из стека вызовов.
Цель start () — создать отдельный стек вызовов для потока. Он создает отдельный стек вызовов, а затем JVM вызывает run ().
Давайте посмотрим, что произойдет, если мы не вызовем start (), а скорее вызовем run () напрямую. Мы изменили первую программу, обсуждаемую здесь .
|
Выход:
Thread 1 is running Thread 1 is running Thread 1 is running Thread 1 is running Thread 1 is running Thread 1 is running Thread 1 is running Thread 1 is running
Из вывода выше видно, что мы получаем одинаковые идентификаторы для всех потоков, потому что мы напрямую вызвали run (). Программа, которая вызывает start (), печатает разные идентификаторы (см. Это )
Ссылки:
- http://www.javatpoint.com/what-if-we-call-run()-method-directly
- http://www.leepoint.net/JavaBasics/methods/methods-25-calls.html
Эта статья предоставлена kp93 . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- Многопоточность в Java
- Тупик в Java Многопоточность
- Приоритет потока Java в многопоточности
- Метод MatchResult start (int) в Java с примерами
- Matcher start (int) метод в Java с примерами
- Метод MatchResult start () в Java с примерами
- Метод start () в Java с примерами
- Метод начала (String) в Java с примерами
- Java | Как начать изучать Java
- Разница между Thread.start () и Thread.run () в Java
- Переопределение метода start () класса Thread
- Java.util.function.IntPredicate интерфейс в Java с примерами
- Java.util.function.BiPredicate интерфейс в Java с примерами
- Java.util.function.LongPredicate интерфейс в Java с примерами
- Java.util.function.DoublePredicate интерфейс в Java с примерами
0.00 (0%) 0 votes