¿Cómo encontrar números primos y palíndromos usando subprocesos múltiples en Java?

Multithreading en Java es un proceso de ejecución de dos o más subprocesos simultáneamente para la máxima utilización de la CPU. Las aplicaciones de subprocesos múltiples ejecutan dos o más subprocesos al mismo tiempo. Por lo tanto, también se conoce como Concurrencia en Java. Cada hilo corre paralelo entre sí. Múltiples subprocesos no asignan áreas de memoria separadas, por lo tanto, ahorran memoria.

Declaración del problema: escriba un programa de dos subprocesos, donde un subproceso encuentre todos los números primos (de 0 a 100) y otro subproceso encuentre todos los números palíndromos (de 10 a 1000). Programe estos subprocesos de manera secuencial para obtener los resultados. Ahora reprogramarlos como subprocesos paralelos.

Solución:

1. Dos hilos iniciados, uno para imprimir números primos y otro para imprimir números palíndromos

2. Algoritmo para imprimir números primos:

       COMIENZO

         Paso 1 → Tomar la variable entera A

         Paso 2 → Divide la variable A entre (A-1 a 2)

         Paso 3 → Si A es divisible por cualquier valor (A-1 a 2) no es primo

         Paso 4 → De lo contrario, es primo

       DETÉNGASE

3. Algoritmo para imprimir número de palíndromo

   COMIENZO

     Paso 1 → Obtenga el número del usuario

     Paso 2 → Mantener el número en variable temporal

     Paso 3 → Invertir el número

     Paso 4 → Compara el número temporal con el número invertido

     Paso 5 → Si ambos números son iguales, imprima.

   Deténgase

Cómo funciona el bloque de sincronización:

thread 1, thread 2, thread 3 ---> synchronization ---> thread 1
          thread 2,thread 3  ---> synchronization ---> thread 2

Java

import java.util.Scanner;
 
// thread to print prime numbers
class part1 extends Thread {
    public synchronized void run()
    {
        int i = 0;
        int num = 0;
        String primeNumbers = "";
       
        for (i = 1; i <= 100; i++) {
            int counter = 0;
            for (num = i; num >= 1; num--) {
               
                // condition to check if the number is prime
                if (i % num == 0) {
                   
                    // increment counter
                    counter = counter + 1;
                }
            }
           
            if (counter == 2) {
                primeNumbers = primeNumbers + i + " ";
            }
        }
       
        System.out.println("\nPrime numbers from 0 to 100 : \n"
            + primeNumbers);
       
        System.out.println();
    }
}
 
// thread to print palindrome numbers
class part2 extends Thread {
    public synchronized void run()
    {
        int n, b, rev = 0;
        int N = 1000;
       
        System.out.println("Palindrome numbers from 10 to 1000 : ");
       
        for (int i = 10; i <= N; i++) {
            n = i;
            while (n > 0) {
 
                // Find reverse of n
                b = n % 10;
                rev = rev * 10 + b;
                n = n / 10;
            }
 
            // If n and rev are same, n is palindrome number
            if (rev == i) {
                System.out.print(i + " ");
            }
            rev = 0;
        }
    }
}
public class Main {
    public static void main(String args[])
    {
        part1 t1 = new part1();
        part2 t2 = new part2();
 
        Thread m1 = new Thread(t1);
        Thread m3 = new Thread(t2);
        Scanner sc = new Scanner(System.in);
 
        // start() method starts the execution of thread.
        m1.start();
        m3.start();
 
        try {
 
            // join() method waits for the thread to die
            m1.join();
            m3.join();
        }
        catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
Producción

Palindrome numbers from 10 to 1000 : 
11 22 33 44 55 66 77 88 99 101 111 121 131 141 151 161 171 181 191 202 212 222 232 242 252 262 272 282 292 303 313 323 333 343 353 363 373 383 393 404 414 424 434 444 454 464 474 484 494 505 515 525 535 545 555 565 575 585 595 606 616 626 636 646 656 666 676 686 696 707 717 727 737 747 757 767 777 787 797 808 818 828 838 848 858 868 878 888 898 909 919 929 939 949 959 969 979 989 999 
Prime numbers from 0 to 100 : 
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 

Publicación traducida automáticamente

Artículo escrito por snehaveerakumar 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 *