1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Problema com interrupção de tags

Boa noite a todos

Estou fritando com um exercício há alguns dias 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

Obrigado


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!");
    }

}
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java ou faça a sua própria pergunta.