Рубрики

Вывод программы Java | Набор 16 (Темы)

Предварительные условия: многопоточность в Java , жизненный цикл и состояния потока , объединение потоков в Java , метод start () в Java
1) Каким может быть вывод следующей программы?

public class Test implements Runnable

{

    public void run()

    {

        System.out.printf("GFG ");

        System.out.printf("Geeks ");

    }

    public static void main(String[] args)

    {

        Test obj = new Test();

        Thread thread = new Thread(obj);

          

        thread.start();

        System.out.printf("Geeks ");

        try 

        {

            thread.join();

        

        catch (InterruptedException e) 

        {

            e.printStackTrace();

        }

        System.out.println("for ");

    }

}

а) GFG Geeks Geeks для
б) вундеркиндов GFG вундеркиндов для
в) Либо А, либо Б
г) А и В вместе

Отв. (С)
Объяснение: Из выражения «thread.start ()» мы имеем два потока: « Главный поток» и «поток». Таким образом, «GFG» может быть напечатан или «Geeks», в зависимости от того, какой поток, расписание планировщика потока.
Для (a) родительский поток после вызова метода start () приостанавливается, и планировщик потока планирует дочерний поток, который затем завершает его выполнение. После этого родительский поток запланирован. Для (b) родительский поток вызывает метод start (), но продолжает его выполнение и печатает на консоли. Когда вызывается метод join (), родительский поток должен ждать, пока его дочерний элемент завершит свое выполнение. Планировщик потока планирует дочерний поток, пока родитель ожидает завершения дочернего процесса.


2) Каков вывод следующей программы?

public class Test implements Runnable

{

    public void run()

    {

        System.out.printf("GFG ");

    }

    public static void main(String[] args) throws InterruptedException

    {

        Thread thread1 = new Thread(new Test());

        thread1.start();

        thread1.start();

        System.out.println(thread1.getState());

    }

}

а) GFG GFG ПРЕКРАЩЕН
б) GFG ПРЕКРАЩЕН
в) ошибка компиляции
г) Ошибка выполнения

Отв. (Д)
Объяснение: Вызов метода start () для потока переводит поток в состояние RUNNABLE. Но вызов метода start () для потока, который уже запущен, вызывает исключение IllegalThreadStateException, поскольку поток уже находится в состоянии RUNNABLE.

3) Каков вывод следующей программы?

public class Test extends Thread implements Runnable

{

    public void run()

    {

        System.out.printf("GFG ");

    }

    public static void main(String[] args) throws InterruptedException

    {

        Test obj = new Test();

        obj.run();

        obj.start();

    }

}

а) Ошибка во время выполнения
б) ошибка компиляции
в) GFG GFG
г) ничего из вышеперечисленного
Отв. (С)
Объяснение: Тестовый класс расширяет класс Thread, в котором реализован метод start (). Поэтому вызов start () для объекта, расширяющего класс Thread, вызывает метод run (), определенный в программе.

4) Каков вывод следующей программы?

class myThread implements Runnable

{

    public void run()

    {

        Test.obj.notify();

    }

}

  

public class Test implements Runnable

{

    public static Test obj;

    private int data;

    public Test()

    {

        data = 10;

    }

    public void run()

    {

        obj = new Test();

        obj.wait();

        obj.data += 20;

          

        System.out.println(obj.data);

    }

    public static void main(String[] args) throws InterruptedException

    {

        Thread thread1 = new Thread(new Test());

        Thread thread2 = new Thread(new myThread());

          

        thread1.start();

        thread2.start();

      

        System.out.printf(" GFG - ");   

    }

}

а) 30 GFG —
б) GFG — 30
в) GFG —
г) ошибка компиляции

Отв. (Д)
Объяснение: Объект должен сначала получить блокировку перед вызовом метода wait (). Также метод wait () генерирует проверенное исключение (InterruptedException), мы должны включить его в блок try-catch или выбросить его.

5) Каков вывод следующей программы?

import java.util.concurrent.*;

  

public class Test implements Runnable

{

    public static CyclicBarrier barrier = new CyclicBarrier(3);

    public void run()

    {

        System.out.printf(" GFG ");

        try 

        {

            barrier.await();

        } catch (InterruptedException | BrokenBarrierException e) 

        {

            e.printStackTrace();

        }

    }

    public static void main(String[] args) throws InterruptedException

    {

        Thread thread1 = new Thread(new Test());

        Thread thread2 = new Thread(new Test());

          

        thread1.start();

        thread2.start();

        System.out.printf(" GeeksforGeeks ");

        try 

        {

            barrier.await();

        } catch (InterruptedException | BrokenBarrierException e) 

        {

            e.printStackTrace();

        }

        System.out.printf(" End ");

          

    }

}

а) GeeksforGeeks GFG GFG End
б) GFG GeeksforGeeks GFG End
в) GFG GFG GeeksforGeeks End
г) все вышеперечисленное

Отв. (Д)
Объяснение: Для (a) родительский поток продолжает выполняться, пока не достигнет барьера. Дочерний поток тогда запланирован. Для (b) планировщик потока планировщик thread1. Как только он достигнет барьера, родительский поток запланирован. Как только родительский поток достиг барьера, поток 2 запланирован. Для (c) оба дочерних потока запланированы. Наконец, когда каждый из дочерних потоков достигает барьера, родительский поток запланирован.

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

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

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

Вывод программы Java | Набор 16 (Темы)

0.00 (0%) 0 votes