Olá a todos. Fiz uma pesquisa no fórum mas não achei nada que pudesse esclarecer minha dúvida.
Estou desenvolvendo uma aplicação que inicializa e executa algumas Threads, 5 por exemplo:
ExecutorService e = Executors.newFixedThreadPool(5);
for (int i = 0; i < 5; i++)
e.execute(new RemoteTerminal());
Na execução dessas Threads, elas recebem uma referência para um objeto. Esse objeto
possui um método create.
MyTransaction transaction = Deck.getInstance().pickUpACard();
transaction.create(param1, param2);
Esse método create executa uma série de operações que eu preciso
que sejam feitas em modo exclusivo. Por isso coloquei o lock como vocês
podem ver abaixo:
public class NewOrderTransaction implements MyTransaction {
private final Lock lock = new ReentrantLock();
public void create(long param1, long param2) {
lock.lock();
try {
//do op1
//do op2
System.out.println("teste");
} finally {
lock.unlock();
}
}
}
Preparei para executar em modo debug e coloquei o breakpoint na linha do System.out.println(“teste”);
Quando começei a execução, foi possível ver na stack da VM (pelo Eclipse) que as 5 Threads estavam paradas na linha
do System.out.println(“teste”);
Ai surgiu minha dúvida. Isso deveria realmente acontecer? Já que essa linha está dentro de um lock, apenas uma Thread deveria executá-la
por vez. Certo?
Obrigado por enquanto
- Murilo