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?