Problema com Thread

11 respostas
T

Primeiramente boa noite, já faz um bom tempo que leio o fórum e hoje resolvi me cadastrar.

Tenho uma Thread que não esta executando corretamente, se alguém poder me dar alguma dica eu agradeço.

package trabalhoEscalonador;


public class SSTF extends Thread {

    Requisicao r = new Requisicao(); // Classe Requesição extends Thread 
    Disco disco = new Disco("SSTF");

    private void procuraProximo() {
     //implementacao
    }

    public void run() {
        while (true) {
            System.out.println("foi")
            if (!r.requisicao.isEmpty()) {
                this.procuraProximo();
            }
            try {
                sleep(2000);
            } catch (InterruptedException e) {
                System.out.println(e);
            }
        }
    }
}
package trabalhoEscalonador;

public class Main {

    public static void main(String[] args) {
        SSTF sstf = new SSTF();
        Requisicao requisicao = new Requisicao();

        requisicao.start();
        sstf.start();
    }
}

Não da erro, porém nem o print sai.
Obrigado.

11 Respostas

Andre_Fonseca

oi, é impressão minha ou o método run está com R maiúsculo??

T

Estava sim, já consertei porém ainda não funciona…

P

Sua classe Main nem extende a classe STF entao… nao tem nenhum metodo run que ira executar… e conseguentemente ira dar erro

T

Não entendi sua colocação.

As duas classes Requisição e SSTF extende da classe Thread. O main tem que ter o extends da classe SSTF? isso limitaria eu executar só uma thread no main.

ViniGodoy

Já tentou usar o depurador?

E não tem nada usar herança, como o Pedro comentou…

ViniGodoy

PS: Você se ligou que o objeto Requisição que tem dentro de SSTF não é mesmo criado no main, não é?

Se quiser que seja o mesmo, você precisará passar a requisição do main por parâmetro:

package trabalhoEscalonador;

public class SSTF extends Thread {
    Requisicao requisicao;
    Disco disco = new Disco("SSTF");
    public SSTF(Requisicao requisicao) { 
       this.requisicao = requisicao;
    }

    private void procuraProximo() {
        int menorSeek = 300;

        for (int i = 0; i < r.requisicao.size(); i++) {
            if (menorSeek > Math.abs(disco.getPosicaoBraco() - (Integer) r.requisicao.get(i))) {
                menorSeek = Math.abs(disco.getPosicaoBraco() - (Integer) r.requisicao.get(i));
                r.requisicao.remove(i);
            }
            disco.executarRequisicao(menorSeek);
            System.out.println("Removeu");
        }
    }

    public void run() {
        while (true) {
            System.out.println("foi")
            if (!r.requisicao.isEmpty()) {
                this.procuraProximo();
            }
            try {
                sleep(2000);
            } catch (InterruptedException e) {
                System.out.println(e);
            }
        }
    }
}

E no main:

package trabalhoEscalonador;

public class Main {

    public static void main(String[] args) {
        Requisicao requisicao = new Requisicao();
        SSTF sstf = new SSTF(requisicao);

        requisicao.start();
        sstf.start();
    }
}
P

Não quis dizer que devia usar herança so quis dizer que nao teria como a chamada ao .start() achar o metodo run da classe STF

ViniGodoy

E porque não? Ambas as classes estendem de Thread.

P

Esta certo estava viajando…

ViniGodoy

hehehehe… acontece nas melhores famílias.

T

A dica do ViniGodoy funcionou, agradeço a todos pela ajuda.

Criado 19 de novembro de 2010
Ultima resposta 20 de nov. de 2010
Respostas 11
Participantes 4