Duvida Iniciante - Java thread

1 resposta Resolvido
threadsjava
J

Oi gente, alguém poderia me ajudar?
Estou iniciando os estudos em java, como eu poderia somar os elementos de um vetor de forma paralela usando as threads?

1 Resposta

S
Solucao aceita

Dispara várias Threads, cada uma somando um intervalo de elementos do vetor.

Exemplo de classe que soma um intervalo de elementos:

public class SomaIntervalo implements Runnable {

    private final int[] vetor;
    private final int de;
    private final int ate;
    private int resultado;

    public SomaIntervalo(int[] vetor, int de, int ate) {
        this.vetor = vetor;
        this.de = de;
        this.ate = ate;
    }

    public int getResultado() {
        return resultado;
    }

    @Override
    public void run() {
        resultado = 0;
        for (int i = de; i <= ate; i++) {
            System.out.println(Thread.currentThread().getName() + " somando valor " + vetor[i]);
            resultado += vetor[i];
        }
    }
}

Exemplo de uso com Threads:

public class Exemplo {

    public static void main(String[] args) {
        try {
            int[] vetor = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };

            SomaIntervalo parte1 = new SomaIntervalo(vetor,  0,  6); // vai somar os elementos das posições  0 até  6
            SomaIntervalo parte2 = new SomaIntervalo(vetor,  7, 13); // vai somar os elementos das posições  7 até 13
            SomaIntervalo parte3 = new SomaIntervalo(vetor, 14, 20); // vai somar os elementos das posições 14 até 20

            // cria 3 threads
            Thread thread1 = new Thread(parte1, "Thread 1");
            Thread thread2 = new Thread(parte2, "Thread 2");
            Thread thread3 = new Thread(parte3, "Thread 3");

            // dispara as 3 threads    
            thread1.start();
            thread2.start();
            thread3.start();

            // espera as 3 threads terminarem a execução
            thread1.join();
            thread2.join();
            thread3.join();

            // soma os resultados calculados em cada parte
            int soma = parte1.getResultado() + parte2.getResultado() + parte3.getResultado();
            System.out.println("Soma: " + soma);
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }
}
Criado 19 de outubro de 2020
Ultima resposta 19 de out. de 2020
Respostas 1
Participantes 2