Imprima números pares e impares en orden creciente usando dos hilos en Java

Requisito previo: subprocesamiento múltiple

Dado un número entero N, la tarea es escribir un programa Java para imprimir los primeros N números naturales en orden creciente usando dos hilos .

Ejemplos:

Entrada: N = 10
Salida: 1 2 3 4 5 6 7 8 9 10

Entrada: N = 18
Salida: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Enfoque: La idea es crear dos hilos e imprimir números pares con un hilo y números impares con otro hilo. A continuación se muestran los pasos:

  • Cree dos subprocesos T1 y T2 usando la siguiente sintaxis, donde T1 y T2 se usan para imprimir números pares e impares respectivamente.

    Thread T1 = new Thread(new Runnable() {
               public void run() { mt.printEvenNumber(); }
    });

    Thread T2 = new Thread(new Runnable() {
               public void run() { mt.printOddNumber(); }
    });

    donde
    printOddNumber() se usa para imprimir todos los números impares hasta N ,
    printEvenNumber() se usa para imprimir todos los números pares hasta N .

  • Mantenga una variable de contador global e inicie ambos subprocesos con la siguiente función:

    T1.inicio();
    T2.inicio();

  • Si el contador es par en el subproceso T1 , espere a que el subproceso T2 imprima ese número par. De lo contrario, imprima ese número impar, incremente el contador y notifique al Thread T2  usando la función notificar() .
  • Si el contador es impar en el hilo T2 , espere a que el hilo T1 imprima ese número impar. De lo contrario, imprima ese número par, incremente el contador y notifique al Subproceso T1 usando la función notificar().

Java

// Java program for the above approach
  
public class GFG {
  
    // Starting counter
    int counter = 1;
  
    static int N;
  
    // Function to print odd numbers
    public void printOddNumber()
    {
        synchronized (this)
        {
            // Print number till the N
            while (counter < N) {
  
                // If count is even then print
                while (counter % 2 == 0) {
  
                    // Exception handle
                    try {
                        wait();
                    }
                    catch (
                        InterruptedException e) {
                        e.printStackTrace();
                    }
                }
  
                // Print the number
                System.out.print(counter + " ");
  
                // Increment counter
                counter++;
  
                // Notify to second thread
                notify();
            }
        }
    }
  
    // Function to print even numbers
    public void printEvenNumber()
    {
        synchronized (this)
        {
            // Print number till the N
            while (counter < N) {
  
                // If count is odd then print
                while (counter % 2 == 1) {
  
                    // Exception handle
                    try {
                        wait();
                    }
                    catch (
                        InterruptedException e) {
                        e.printStackTrace();
                    }
                }
  
                // Print the number
                System.out.print(
                    counter + " ");
  
                // Increment counter
                counter++;
  
                // Notify to 2nd thread
                notify();
            }
        }
    }
  
    // Driver Code
    public static void main(String[] args)
    {
        // Given Number N
        N = 10;
  
        // Create an object of class
        GFG mt = new GFG();
  
        // Create thread t1
        Thread t1 = new Thread(new Runnable() {
            public void run()
            {
                mt.printEvenNumber();
            }
        });
  
        // Create thread t2
        Thread t2 = new Thread(new Runnable() {
            public void run()
            {
                mt.printOddNumber();
            }
        });
  
        // Start both threads
        t1.start();
        t2.start();
    }
}
Producción:

1 2 3 4 5 6 7 8 9 10


Complejidad temporal: O(N)
Espacio auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por Rajput-Ji y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *