Thread - quero fazer o metodo rodar em

olá,
To com dificuldades em enteder o uso das threads, se alguem tiver um exemplo de como fazer um metodo rodar em segundo plano pra mim olhar , pois tenho um metodo blocking (ServerSocket) e gostaria de deixalo em segundo plano para o usuár o poder executar outras tarefas no gui

grato

olá hrober,

Uma forma de fazer isso, é vc criar uma classe que extenda a classe Thread:

class BasicThread1 extends Thread {
        //Este é o metodo chamado qdo a thread é iniciada
        public void run() {
        }
    }

e depois vc utiliza da seguinte forma:

    // Cria e starta a Thread
    Thread thread = new BasicThread1();
    thread.start();

ai teu processo fica rodando em background…

flw

andersonra,
soh uma duvida, eu posso extender duas vezes a class ? class name extends thread , JFrame ?

jah agradeco a ajuda.

Num pode… Java nao suporta herança multipla… o que voce pode fazer é herdar JFrame e implementar a interface Runnable que é a mesma coisa que herdar Thread, só que é obrigatória a implementação do método Run() :slight_smile:

vc tem duas opcoes nesse caso, uma seria criar uma classe separada q estenda a Thread, e outra eh implementar Runnable:

public class Janela extends JFrame implements Runnable{
 ...
 public static void main(String args[]){
  Janela j = new Janela();
  j.setVisible(true);
  Thread t = new Thread(j);
  t.start();
 }
 ...
 public void run(){
  // aqui vc poe os sockets
 }
}

eu particularmente prefiro usar uma classe separada q estenda a Thread, pq dai fica mais especifico e a classe acaba ficando mais facil para modificar, mas eh vc qm decide como fazer :grin:

Eu concordo com o Felipe de separar as classes… odeio massaroca… mas tem vezes que precisa… esses dias eu fiz um trabalho que precisava atualizar a tela de tempo em tempo… dae fiz com trhead… e acabei herdando JFrame e implemenando Runnable

galera baseado em que vcs disseram eu fiz o seguiante code

[code]import java.util.Date ;

class Time
{
	public static void main(String args[])
	{
	int a=0;
	Thread timeStop = new Thread();
	timeStop.start();
	Thread thread = new basic();
	thread.start();
	for(a = 0 ; a<25;a++)
	{
		try
		{
			System.out.println(a);
			timeStop.sleep(1000);
		}
		catch(InterruptedException e)	
		{
				System.out.println("erro");
		}
	}

	}
}

class basic extends Thread
{
	public void run() 
	{
		int b=0;
		for(b=133;b<166;b++)
		{
				try
				{
				System.out.println(b);
				this.sleep(1000);
				}catch(InterruptedException e)
				{
					System.out.println("erro");
				}	
		}
	}
}[/code]

aparentemente tah certo, eh isso mesmo ?
eh dessa maneira mesmo ?