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?
Duvida Iniciante - Java thread
J
1 Resposta
S
Solucao aceita
2 likes
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
Alura POO: o que é programação orientada a objetos? Aprenda os conceitos básicos da programação orientada a objetos, como classes, objetos, herança, encapsulamento e polimorfismo, com exemplos.
Casa do Codigo Desbravando SOLID: Praticas avancadas para codigos de... Por Alexandre Aquiles — Casa do Codigo