Thread sleep em background

6 respostas
lucasdona

Bom dia galera, seria possível eu rodar um Thread.sleep(tempo) em background? e ainda quando esse tempo acabar esse método só iniciar depois que o outro método acabar?
Exemplo:

for (int i=1; i<=1000; i++){ metodoA(); Thread.sleep(10000) //10 segundos metodoB() Thread.sleep(9000) }

O primeiro método vai rodar e vai iniciar a contagem, só que não quero que a aplicação fique parado nele até acabar, gostaria que continuasse a aplicação, mas tem também outra coisa, só queria que o metodoB iniciasse se o metodoA já estivesse acabado, porque vai chegar uma certa hora que o metodoB iniciará sendo que o metodoA ainda está em execução.
Porque issso? pense que está utilizando a classe Robot e está usando os metodos “mousePress” e “mouseRelease” em que o mouse clica sozinho em uma certa posição da tela, então o metodoB só poderia ser iniciado caso o metodoA já estiver finalizado.
Resumindo, rodar o Thread.sleep() em background, mas se um ta rodando o outro não pode iniciar.
Abraços.

6 Respostas

d34d_d3v1l

Coloca o conteudo do método A no RUN de uma classe que extende runnable … faça o mesmo com o método B e coloque o sleep no final do run… assim a MAIN nao ficará esperando nada!

abraços

ViniGodoy

É o que o DavidDisse. Dispare tudo isso numa nova thread.

lucasdona

Não entendi muito bem :frowning:

alexvingg

Você vai ter outra classe q extends de runnable e no metodo run() dela
você vai colocar seu código.

da uma olhada ai
http://www.javabeginner.com/learn-java/java-threads-tutorial

VictorMatuk

A Grosso modo

public class DFasda {
	public static void main(String[] args) throws InterruptedException {
		for (int i=1; i<=1000; i++){
			new Thread(new Runnable() {
				@Override
				public void run() {
					metodoA();
				}
			}).start();
			new Thread(new Runnable() {
				@Override
				public void run() {
					metodoB();
				}
			}).start();
		}
	}
	public static void metodoA() {
		System.out.println("METODO A");
	}
	public static void metodoB() {
		System.out.println("METODO B");
	}
}

Se quiser que o metodo B só start quando o A terminar, coloque um boolean ai, tipo Flag

lucasdona

mas acho que não vai funcionar da forma que eu preciso.
Acho que não consegui explicar direito, mas, VictorMatuk, vou citar então em cima do seu exemplo. E se o metodoA tivesse um Thread.sleep(60000), então a aplicação só continuaria depois desse tempo, é justamente isso que nun quero, quero que a aplicação continue, mas o metodo B só inicie quando o metodo A acabar e o sleep continue contando para a execução do metodo A novamente. Vamos supor…

metodoA começou a executar agora, ele fica 20 segundos realizando cliques na tela. e depois que acabar entra um sleep de 30 min.
metodoB começa a executar logo o termino do metodoA, ele fica 30 segundos clicando na tela, e entra em sleep de 50 min.
vai chegar em um intervalo de tempo em que o sleep do A e o B acabaram junto, isso se o sleep dos métodos estiverem em background para a aplicação nao parar no sleep. é para isso que quero que mesmo que um metodo nao respeito o sleep do outro, ele espere a execução do outro metodo acabar…

Criado 17 de abril de 2011
Ultima resposta 18 de abr. de 2011
Respostas 6
Participantes 5