Duvida Iniciante - Java thread

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?

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();
        }
    }
}
2 curtidas