Я читал о потоках в java и создавал новый поток, реализуя интерфейс Runnable и используя функции start () и run ().

Мой код выглядит следующим образом:

class NewThread implements Runnable
{
    Thread t;

    NewThread()
    {
        t = new Thread(this,"Demo Thread");
        System.out.println("Child Thread: " + t);
        t.start();
    }
    public void run()
    {
        try
        {
        for(int i = 5; i > 0; i--)
        {   
            System.out.println("Child Thread: " + i);
            t.sleep(500);
        }
    }
    catch(InterruptedException e)
    {
        System.out.println("Exception Caught!");
    }
    System.out.println("Exiting child thread!");
    }
}

class Threads
{
public static void main(String args [])
{
    new NewThread();

    try
    {
        for(int i = 5; i > 0; i--)
        {
            System.out.println("Main thread: " + i);
            Thread.sleep(1000);
        }
    }
    catch(InterruptedException e)
    {
        System.out.println("Exception caught!");
    }
    System.out.println("Exiting main thread!");
    }
}

Из первой строки основной функции вызывается конструктор класса NewThread.

Я прочитал, что

После создания нового потока он не запустится, пока вы не вызовете его метод start (), который объявлен в Thread. По сути, start () выполняет вызов run ()

Тогда почему основной поток запускается сразу после вызова start (), но не дочерний поток, который является функцией run ()?

Ниже приводится результат:

C:\Users\Kaustubh Srivastava\Desktop\Java\Test>java Threads
Child Thread: Thread[Demo Thread,5,main]
Main thread: 5
Child Thread: 5
Child Thread: 4
Main thread: 4
Child Thread: 3
Child Thread: 2
Main thread: 3
Child Thread: 1
Exiting child thread!
Main thread: 2
Main thread: 1
Exiting main thread!
0
Kaustubh Srivastava 10 Янв 2018 в 18:00

1 ответ

Лучший ответ

Основная концепция заключается в том, что после вызова start дочернего потока оба потока работают параллельно .

Что вы видите в своей распечатке, так это то, что основной поток сначала печатает свою первую строку. С таким же успехом это может быть дочерний поток.

Эту фразу по существу трудно понять, но как только вы поймете, что параллельные потоки работают асинхронно, порядок их выполнения становится почти произвольным.

0
OldCurmudgeon 10 Янв 2018 в 15:06