método wait()

Olá galera, :smiley:
Eu estou querendo
fazer algo do tipo:

	public static void main(String[] args) throws InterruptedException {
		Object systemSession = new Object();
		Session session = new Session(systemSession);
		session.wait();
		System.out.println("Sessão Expirada: " + session.isExpired());
	}

mas na hora q eu vou compilar,
o console acusa:

Exception in thread "main" java.lang.IllegalMonitorStateException
	at java.lang.Object.wait(Native Method)
	at Horas_Sistema.Session.main(Session.java:110)

Gostaria de saber que exceção é essa
e como que eu faço para utilizar
o método wait para o programa
aguardar 1minuto = 60000 milissegundos?

Será que alguém poderia me ajudar? :lol:

Abraço.

O método “wait” normalmente nunca deve ser usado, a menos que você saiba como usá-lo.

O que você tem de usar é Thread.sleep:

// Isto espera 60 mil milissegundos, ou 60 segundos.
try { Thread.sleep (60000); } catch (InterruptedException ex) {}
1 curtida

Tenta colocar esse wait dentro de um bloco sincronizado.

Se eu não me engano, se não tiver dentro de um bloco ou método sincronizado, ele dispara IllegalMonitorStateException…

Espero ter ajudado!

Abraços!

[quote=ajfilho]Tenta colocar esse wait dentro de um bloco sincronizado.

Se eu não me engano, se não tiver dentro de um bloco ou método sincronizado, ele dispara IllegalMonitorStateException…

Espero ter ajudado!

Abraços![/quote]

Por ora melhor seguir o conselho do thingol. Para conseguir usar wait/notify, deve-se adquirir o “monitor” do objeto em que se está chamando wait/notify. Adquire-se o monitor de um objeto quando se está num bloco de código sincronizado referenciando tal objeto ou adquire-se o monitor de um objeto quando a execução está “dentro” de um método sincronizado desse objeto.

Inté.

Valeu thingol pela
ajuda era isso mesmo
que eu estava precisando
fazer.

Obrigado pela ajuda também
ajfilho mas eu não sei
direito eu acho que o
método wait só deve
ser usado quando
eu tenho mais de uma thread
não é isso?

No meu caso eu só uso
um processo com uma
thread só que é o main.
Não sei se eu estou
falando alguma bobeira
aqui, mas se eu estiver
errado por favor me corrijam.

Abraço.

Não me lembro de ter usado explicitamente “wait/notify” em um programa. Se preciso de controle complexo entre threads, acabo usando alguma coisa do pacote java.util.concurrent, até porque meu nome não é Doug Lea :frowning:

Kwill
obrigado
pela ajuda também

Abraço.

De certo modo é.

Valeu thingol
mais uma vez. =D
Muito Obrigado.

Grande abraço.

Thingol vc ou alguém sabe se
tem jeito de ir mostrando o
tempo do Thread.sleep (600)
no console?

Abraço.

Thread.sleep (60000) trava seu programa por 60 segundos. Em vez disso, faça um loop que fique atualizando uma mensagem a cada segundo - alguma coisa como:

System.out.println ("Esperando 60 segundos: ");
for (int i = 0; i < 60; ++i) {
    try { Thread.sleep (1000); } catch (InterruptedException ex) {}
    System.out.print ("Passaram-se " +  i + " segundos..." + "\r");
}
System.out.println ("Os 60 segundos terminaram. Voltando ao trabalho");

Obrigado pela
ajuda thingol,
era isso mesmo
que eu estava
precisando
eu nunca tinha
trabalhado
com Thread.

Abraço.

True :lol:

Mas sempre tem um(a) professor(a) de faculdade pra nos “ensinar” (mal) a usar…