[Resolvido]Thread bloqueada com metodo sleep()

1 resposta
ribclauport

Bom dia Pessoal,

Estou estudando Threads, e vi aqui no mock da Enthuare a seguinte questão....

Consider the following class:

public class MySecureClass
{
	public synchronized void doALotOfStuff()
	{
		try 
		{
		   LINE1: Thread.sleep(10000);
		}catch(Exception e){ }
	}
	public synchronized void doSmallStuff()
	{
		System.out.println("done");
	}
}

Assume that there are two threads. Thread one is executing the doALotOfStuff() method and has just called LINE 1 and is sleeping. Now, Thread two decides to call doSmallStff() method on the same object.
What will happen?


Resposta:

done will not be printed untill about 10 seconds.

Bom a pergunta é a seguinte, fiz o teste abaixo implementando o teste e colocando para rodar, segue abaixo o código:

package br.com.thread;

class MySecureClass {
	public synchronized void doALotOfStuff() {
		try {
			Thread.sleep(20000);
		} catch (Exception e) {
		}
	}

	public synchronized void doSmallStuff() {
		System.out.println("done");
	}
}

public class TesteClasseSecure {
	public static void main(String args[]) throws Exception {
		new Thread(new Runnable() {
			public void run() {
				new MySecureClass().doALotOfStuff();
			}
		}).start();

		new Thread(new Runnable() {
			public void run() {
				new MySecureClass().doSmallStuff();
			}
		}).start();

	}
}

Bom rodei este código e na verdade printa done no console e depois a thread 1 que estava dormindo é liberada e o progama é finalizado,
ou seja, a primeria Thread trava somente o método que foi chamado e não todos os metodos sincronizados do objeto...

Sendo assim printa primeiro e espera no minimo dez segundos até o código finalizar!

Alguém poderia me explicar melhor esta resposta se ela esta errada ou eu estou errado?

1 Resposta

ribclauport

Bom, encontrei aqui o que fiz de errado, criei dois objetos né…

Ae não tem lock em objetos distintos…

Abraço.

Criado 10 de janeiro de 2012
Ultima resposta 10 de jan. de 2012
Respostas 1
Participantes 1