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 Thread
s, 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 Thread
s:
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