| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/02/2010 18:59:22
|
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 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/02/2010 19:07:21
|
vmsb11
Java Ninja
Membro desde: 25/08/2008 12:35:00
Mensagens: 251
Offline
|
sim.... em métodos abstratos....
ex:
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/02/2010 19:27:09
|
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".
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/02/2010 19:29:05
|
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)".
|
|
|
 |
|
|