Cancelar um Thread.sleep(long milis)

6 respostas
Ricardo_Neves

Alguem sabe como cancelar uma solicitacao de Thread.sleep ??

preciso de algo mais ou menos assim ::

String str = meuField.getText();

   if(str.equals("dorme")
 {
Thread.sleep(20000);
{
System.out.println("dormiu com sucesso");
}
else
if(str.equals("cancelar dormir")
{
/* aqui colocaria um comando para ele cancelar a solicitacao de sleep,

ou melhor, ele ja tera comecado a contar o tempo, mas se receber cancelar dormir antes do tempo setado no sleep tiver passado, ele deve parar a contagem e nao executar mais o bloco de programacao.*/

}

Se alguem souber alguma maneira de fazer isso, posta ai ok.

Obrigado

6 Respostas

bielmenezes

Pelo código que tu colocou aí nao tem necessidade de acordar do sleep, voce deu um if(tal) //dormir else //outra acao, isso quer dizer q ou ele dorme ou ele faz outra açao…

acopiara

Nesse caso vc tem que usar wait e notify!!
Boa Sorte!

Ricardo_Neves

Mas, fiz um teste com o notify tb, e pelo que vi, depois q ele entra no notify, ele num responde mais aos ifs.

Ou sera que to fazenu algo errado ?

valeu

W

Bom seria melhor postar um codigo mais completo, pois do jeito que ta so executara uma vez mesmo( if ou o else ) ,e não se esquecça que se fizer referencia a Thread principal ( Thread.sleep ) o seu programa inteiro estara dormindo .
Seria bom mostrar a sua intrução de controle(LOOP) pra ta checando sempre esses ifs , e o instanciamento da thread que vc ta usando .

Ricardo_Neves

Neste caso a classe principal eh multithread, uma conexao com socktes, a principal, apos receber o conexao do cliente, intancia outra classe thread dentro da propria main, para verificar as mensagens enviadas, caso alguem envie uma mensagem especifica, o servidor da um aviso que sera desligado, mas quero q continue verificando as mensagens recebidas, pois caso ele digite outro comando, o processo de desconeccao do server, deve ser cancelado, ate se alguem souber uma forma melhor de fazer isso, melhor ainda.

Obrigado novamente

W

bom ainda não intendi direito oque vc quer hehehehh , me desculpe vou deixar pra alguem mais “sabido” ai, bom mas se servir de algo fica um codigo que fiz pra algum trabalho da facul , uso sockets e threads ( para possiblitar + de 1 conexao ) , mas e bem simples tudo no console, flw…

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server extends Thread {
Socket conexao;
boolean autentiacao;
	
	public Server(Socket s)
	{
		this.conexao =s;
	}
	
	public static void main(String[] args) {
		
		try 
		{
		ServerSocket s = new ServerSocket(4444);
		while(true)
		{
			System.out.print("Esperando alguem se conectar...");  
			Socket conexao = s.accept();  
			System.out.println(" Conectou!");  
			 // cria uma nova thread para tratar essa conexao  
			                 Thread t = new Server(conexao);  
			                t.start();  
		}
		
		}
		catch (Exception e) 
		{
		
		}

	}
	public void run(){
		try{
			
		if(conexao.isClosed())
		System.out.println("connection lost");
		//
		
		PrintWriter out = new PrintWriter(
		conexao.getOutputStream(), true);
		BufferedReader in = new BufferedReader(
				new InputStreamReader(
						conexao.getInputStream()));
						String inputLine, outputLine;
						while ((inputLine = in.readLine()) != "fim") {	
					    System.out.println(inputLine);
				
					if (inputLine.equalsIgnoreCase("command")){
						//se digitar command no console faz algo...
					}
					if (inputLine.equalsIgnoreCase("/quit")){
						//se digitar /quit no console termina conexao
						System.out.println("user: "+conexao.getRemoteSocketAddress()
								+" disconnected");
						out.println("kill"); //envia sinal de kill para o cliente
						break;
						
					}		
				}
						in.close();
						out.close();
						conexao.close();				
		}
				catch (IOException e) {
					e.printStackTrace();}}


}
Criado 24 de junho de 2007
Ultima resposta 27 de jun. de 2007
Respostas 6
Participantes 4