Boa noite a todos
Estou fritando com um exercício a algum dia e agradeceria qualquer ajuda que puderem me dar.
Exercício: fazer uma buscar um elemento em uma LinkedLista com várias threads. O usuário do programa é quem escolhe o número de threads. Quando uma das threads achar o elemento buscado, as demais são interrompitadas.
Meu problema: a busca está funcionando corretamente, mas as threads não estão sendo interrompidas
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class ThreadBusca extends Thread {
private List<Integer> listaNumeros;
private int valorBuscado;
private boolean encontrou;
private int inicio;
private List<ThreadBusca>listaThreads = new ArrayList<>();
public ThreadBusca(List<Integer> listaNumeros, int valorBuscado,
boolean encontrou, int inicio, ArrayList<ThreadBusca>listaThreads) {
this.listaNumeros = listaNumeros;
this.valorBuscado = valorBuscado;
this.inicio = inicio;
this.listaThreads = listaThreads;
}
public boolean isEncontrado() {
return encontrou;
}
@Override
public void run() {
//Posicionamento dos ponteiros
ListIterator<Integer> ponteiro = listaNumeros.listIterator(inicio);
while (ponteiro.hasNext()) {
if (this.isInterrupted()) {
break;
}
if (valorBuscado == ponteiro.next()) {
encontrou = true;
for (Thread thread : listaThreads) {
if (thread != Thread.currentThread())
thread.interrupt();
}
break;
}
}
}
@Override
public String toString() {
return "\nVALOR BUSCADO: " + valorBuscado + "\nENCONTROU: " + encontrou +
"\nNOME DA THREAD: " + getName() +"\nINCIOU "
+ "BUSCA PELO ÍNDICE: " + inicio +
"\nINTERROMPIDA: " + isInterrupted();
}
}
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class Principal {
public static void main(String[] args) {
Scanner leia = new Scanner(System.in);
int tamLista = 15;
int buscado;
boolean encontrou = false;
int numThreads;
List<Integer> listaNumeros = new LinkedList<>();
ArrayList<ThreadBusca>listaThreads = new ArrayList<>();
//Preenchimento da lista de números
for (int i = 0; i < tamLista; i++) {
listaNumeros.add(i);
}
System.out.print("Entre com o elemento buscado: ");
buscado = leia.nextInt();
System.out.print("Entre o numero de Threads: ");
numThreads = leia.nextInt();
int aux = tamLista/numThreads;
//Preenchimento da lista de threads
for (int i = 0; i < numThreads; i++) {
ThreadBusca t = new ThreadBusca(listaNumeros, buscado, encontrou, i * aux, listaThreads);
listaThreads.add(t);
}
//Dá start nas threads da lista e pede ao main que espere até todas as threads rodarem
for(ThreadBusca objThread : listaThreads){
objThread.start();
try {
objThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for(ThreadBusca objThread : listaThreads){
System.out.println(objThread.toString());
}
System.out.println("Programa finalizado!");
}
}