Рубрики

Что делает функция start () в многопоточности в Java?

Мы обсуждали, что потоки Java обычно создаются с использованием одного из двух методов: (1) Расширение класса потока. (2) Реализация Runnable

В обоих подходах мы переопределяем функцию run (), но запускаем поток, вызывая функцию start (). Так почему бы нам напрямую не вызвать функцию oveerridden run ()? Почему всегда вызывается функция запуска для выполнения потока?

Что происходит, когда вызывается функция?
При вызове функции выполняются следующие операции:

  1. Аргументы оцениваются.
  2. Новый кадр стека помещается в стек вызовов.
  3. Параметры инициализированы.
  4. Тело метода выполнено.
  5. Значение восстанавливается и текущий кадр стека извлекается из стека вызовов.

Цель start () — создать отдельный стек вызовов для потока. Он создает отдельный стек вызовов, а затем JVM вызывает run ().

Давайте посмотрим, что произойдет, если мы не вызовем start (), а скорее вызовем run () напрямую. Мы изменили первую программу, обсуждаемую здесь .

// Java-код, чтобы увидеть, что все потоки
// помещаем в тот же стек, если мы используем run ()
// вместо start ().

class ThreadTest extends Thread

{

  public void run()

  {

    try

    {

      // Отображение потока, который работает

      System.out.println ("Thread " +

                Thread.currentThread().getId() +

                " is running");

  

    }

    catch (Exception e)

    {

      // бросаем исключение

      System.out.println ("Exception is caught");

    }

  }

}

  
// Основной класс

public class Main

{

  public static void main(String[] args)

  {

    int n = 8;

    for (int i=0; i<n; i++)

    {

      ThreadTest object = new ThreadTest();

  

      // start () заменяется на run () для

      // видя цель старта

      object.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 (), печатает разные идентификаторы (см. Это )

Ссылки:

Эта статья предоставлена kp93 . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Что делает функция start () в многопоточности в Java?

0.00 (0%) 0 votes