Threads nao tao executando!

9 respostas
marcus_menezes

Ola, to com um probleminha com um codigo aqui, as threads nao tao executando!, coloquei um "println("thread ok");" e nao impreme nada, por isso que acho que nao ta executando.
alguem pode me explicar o que ta acontecendo?
Desde ja agradeco a atencao!

Classe onde o thread e definido! ------------------------------------------------------------
public class Clientes extends Thread{
    public String nome;
    public Banco meubanco;

    public Clientes(Banco itau, String nome) {
       this.nome = nome;
       this.meubanco = itau;
    }
    public void run(Conta conta)
    {
     //   meubanco.criarconta();
     //   yield();
        meubanco.fazerdeposito(500.00);
      //  yield();
        meubanco.juros(0);
     //   yield();
        meubanco.efetuarretirada(100);
     //   yield();
        //System.out.println("Thread executada");
        System.out.println("Saldo Total: "+ meubanco.getSaldo());
    }    
}
--------------------------------------------------------------- Classe onde eu inicialiso o thread ---------------------------------------------------------------
public class Testar {
    public static Banco itau;
    public static Clientes cliente1, cliente2;
    public static void main(String[] args)
    {
       // double saldofinal;
        itau = new Banco();
        itau.criarconta();
        cliente1 = new Clientes(itau,"marcus");
        cliente2 = new Clientes(itau, "julio");
        cliente1.start();
        cliente2.start();
        itau.getSaldo(); 
      }

}

9 Respostas

ViniGodoy
  1. Não tem nenhuma exceção sendo lançada?
  2. Já tentou colocar um breakpoint no início do método run()?
  3. Da próxima vez, use as tags code para postar códigos (já te pediram isso em outro tópico, lembra?). Fica colorido e mais fácil de ler. Se ainda não sabe usar o recurso, leia aqui:
    http://www.guj.com.br/posts/list/50115.java
    Dessa vezes eu formatei para você. Se quiser, clica em edit e veja com o eu fiz.
marcus_menezes

ViniGodoy:
1. Não tem nenhuma exceção sendo lançada?
2. Já tentou colocar um breakpoint no início do método run()?
3. Da próxima vez, use as tags code para postar códigos (já te pediram isso em outro tópico, lembra?). Fica colorido e mais fácil de ler. Se ainda não sabe usar o recurso, leia aqui:
http://www.guj.com.br/posts/list/50115.java
Dessa vezes eu formatei para você. Se quiser, clica em edit e veja com o eu fiz.

Foi mal ai cara, eu nao sabia como usar esse recurso, e na verdade nao sei programar em java direito ainda, eu programo tem 3 anos (em Delphi), mais agora resolvi passar pro java, achei muito interessante, mais to apanhando pra caramba.
Se puderem me dar uma luz de como resolver esse problema, ficarei grato!’
Obrigado e ate logo!

ViniGodoy

Se você usa o Delphi a 3 anos, já deve ter usado um depurador, não? Colocado um breakpoint e executado passo-a-passo o código, certo?

A maior parte das IDEs suporta esse recurso para java também. Sugiro que você coloque um breakpoint no início do método run(), rode seu código passo-a-passo e certifique-se de que não está ocorrendo algum erro dentro das outras threads.

L

Faça o seguinte: antes de chamar

itau.getSaldo();

Faça join das duas threads anteriores:

cliente1.join();
cliente2.join();

Programas não esperam as threads terminarem de executar para saírem foram, e é natural que algumas possam ser interrompidas no meio. Para garantir o término da execução, o join() fica esperando as threads terminarem antes do fim do programa.

marcus_menezes

ViniGodoy:
Se você usa o Delphi a 3 anos, já deve ter usado um depurador, não? Colocado um breakpoint e executado passo-a-passo o código, certo?

A maior parte das IDEs suporta esse recurso para java também. Sugiro que você coloque um breakpoint no início do método run(), rode seu código passo-a-passo e certifique-se de que não está ocorrendo algum erro dentro das outras threads.

sim, eu sei como usar um Breakpoint, ja fiz isso so que quando coloco o breakpoint no metodo Run(), vou apertando F7 eu vejo o programa sendo debugado blz, so quando eu start a thread

cliente1.start();
cliente2.start();

era pra aparecer o metodo run() sendo debugado, mais nao aparece, acho que ta dando problema quando vo startar as threads!

ViniGodoy

Esperam sim. Isso só não ocorre para as daemon threads.

Thread t = new Thread(runnable); t.setDaemon(true);

Agora, para esperar a thread tem que pelo menos ter sido iniciada. E talvez não esteja dando tempo nem para isso.

T

A classe Thread tem o método run() , sem argumentos…você deve sobreescrever esse método e chamar o start, ou seja, não coloque argumentos no método run.

ViniGodoy

Putz, é verdade! Eu nem tinha visto.

Para evitar problemas desse tipo, acostume-se a colocar a tag @Override antes de todos os métodos sobrescritos.

Assim, o compilador é capaz de te avisar que o método que você está tentando sobrescrever não existe. Isso é ainda mais útil para quando você altera o nome do método na classe pai, mas esquece de alterar nas filhas.

marcus_menezes

tma:
A classe Thread tem o método run() , sem argumentos…você deve sobreescrever esse método e chamar o start, ou seja, não coloque argumentos no método run.

Isso!!! Deu certo agora, problema resolvido, obrigado a todos, abracos!

Criado 7 de novembro de 2008
Ultima resposta 7 de nov. de 2008
Respostas 9
Participantes 4