Executar thread em intervalos de tempo

5 respostas
M

Preciso criar um programa que inicie com uma thread e que de tempos em tempos verifique um servidor FTP. Se a condição for satisfeita suspende a thread e continua a execução do programa, senão volta para o começo. Isso é possível?

Esse seria o esboço da thread:

ftp.conecta
if (checaArquivo){
     baixar;
     ftp.desconecta;
     thread.suspend; 
}
else{
     ftp.desconecta;
}

5 Respostas

I

Tenta assim:

import java.util.Random;

public class Teste {

	public Teste(){
		final Random random = new Random();
		
		new Thread(){
			public void run(){
				while(true){
					if(random.nextInt(10) == 5) break;
					System.out.println("Errei");
					try {
						sleep(1000);//Para por 1 segundo
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
				continuarPrograma();
			}
		}.start();
	}
	
	public void continuarPrograma(){
		System.out.println("continuar");
	}
	
	public static void main(String[] args) {
		new Teste();
	}
}
M

Não entendi bem o que essa classe Random faz.
Outra coisa é que no meu caso continuarPrograma() deve estar fora da thread e a mesma tem que ser suspendida para isso, só retornando a thread quando continuarPrograma() terminar.

I

O Random te retorna um número randomico, fiz assim apenas para exemplificar um sequencia de testes até um acerto.

Se vc colocar o método continuar programa fora da Thread então ele irá executar independente da Thread se conectar no ftp ou não, pois ao iniciar a Thread o programa continua com a execução dos comandos abaixo. Da forma que vc qué só se não colocar Thread (isso vai acarretar um travamento no programa):

import java.util.Random;

public class Teste {

	public Teste(){
		final Random random = new Random();
		
		while(true){
			if(random.nextInt(10) == 5) break;
			System.out.println("Errei");
			try {
				sleep(1000);//Para por 1 segundo
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		continuarPrograma();
	}
	
	public void continuarPrograma(){
		System.out.println("continuar");
	}
	
	public static void main(String[] args) {
		new Teste();
	}
}
M

Sobre o metodo continuarPrograma ele deve ser executado apenas se a condicao da thread for verdadeira. Essa thread deve ter algum tipo de timer que execute de tempos em tempos. Ao mesmo tempo o resto do programa não pode ser executado enquanto a thread estiver em execução.
Poderia me mostrar como seria o codigo adequado para esse meu exemplo em particular?

I

Cara eu não estou conseguindo entender oq vc qué, e nem pq o continuarPrograma não pode ficar dentro da Thread, coloque um trecho de código do seu programa mostrando como está hoje e seja mais explicativo na sua questão.

Criado 5 de setembro de 2008
Ultima resposta 5 de set. de 2008
Respostas 5
Participantes 2