Existe algum método que não aceita a palavra chave "synchronized"?  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
TiagoTC
JavaTeenager

Membro desde: 09/02/2008 01:12:58
Mensagens: 189
Offline

Estava fazendo alguns testes aqui e, pelo que pude ver, todos os métodos aceitam o uso da palavra chave syncronized em suas declarações. Por exemplo, o método main() aceita, equals(), hashCode(), qualquer método que você tenha definido...

A minha pergunta é: existe alguma ocasião onde a palavra chave synchronized não pode ser usada junto com a declaração de um método?

Pérola: "Nunca coloque seu celular em um forno de microondas, pois isso faz com que a bateria exploda" - Manuais de telefones celulares
vmsb11
Java Ninja

Membro desde: 25/08/2008 12:35:00
Mensagens: 251
Offline

sim.... em métodos abstratos....
ex:

entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline

Uma forma simples de você lembrar onde é que se pode usar "synchronized" na declaração de métodos é que ele é equivalente a usar synchronized (this) ou synchronized (EstaClasse.class) dependendo do tipo de método. Ou seja:


é mais ou menos equivalente a isto aqui:


Como você pode ver, se o método é abstract, ou então é uma declaração de método em uma interface, não é possível o compilador substituir "synchronized" por "synchronized(this)", por exemplo. O método deve sempre ser concreto para poder ser marcado com "synchronized".
entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline

Eu digo que é "mais ou menos equivalente" porque na verdade o javac não gera os bytecodes correspondentes a "synchronized (this)". Em vez disso, ele marca o método como synchronized, e deixa a cargo do Just-In-Time Compiler (HotSpot no caso do Java da Sun) o trabalho de gerar código nativo (ou de efetuar a interpretação) de modo que fique equivalente a "synchronized (this)".
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team