| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/08/2004 11:46:14
|
j2ee
Debugger
Membro desde: 24/08/2004 10:48:32
Mensagens: 51
Localização: São Paulo/SP
Offline
|
Tenho uma classe que lê meu arquivo.properties e utilizei o patterns Singleton porém deparei em um problema:
o seguinte eu preciso colocar a palavra "syncronized"
no metodo "getInstance()"
ou
no metodo "getProperty(String texto)".
ou nos dois metodos?
pois só irá existir um objeto em memoria e todos irão compartilhar o mesmo endereço de memoria. onde devo colocar a palavra "syncronized" ou não precisa?
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/08/2004 12:26:30
|
Shneider
Debugger
Membro desde: 17/08/2003 09:58:57
Mensagens: 72
Offline
|
O Singleton é usado para ter certeza que apenas uma instancia vai estar em memoria, a palavra-chave synchronized nos assegura que o método vai ser executado por apenas uma thread de cada vez, então a palavra-chave synchronized entra no método getInstance( ), para você ter certeza que vai ter apenas uma instancia do objeto mesmo se duas threads tentarem criar a instancia ao mesmo tempo.
|
[ ]'s |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/08/2004 12:53:06
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline
|
Acho que o que ele quer limitar o acesso à é o método getProperties(), logo este método deveria ser sincronizado.
Sincronizar o método getInstance() vai fazer com que cada um dos clientes desta classe obtenha a instância, e não necessariamente vai instanciar a classe. E mesmo que isntanciasse se pudessem ser instanciados inúmeros clientes ele não seria um Singelton.
Assim, duas classes pdoeriam obter a instância em paralelo, uma após a outra, e continuar acessando getProperties() em paralelo.
O ponto é: String são imutáveis, por que raios você precisaria sincronizar mesmo este método?
[]s
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/08/2004 13:19:33
|
danieldestro
Moderador
![[Avatar]](/images/avatar/a5bfc9e07964f8dddeb95fc584cd965d.png)
Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline
|
Coloque o synchronized no método getInstance().
|
gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/08/2004 13:26:13
|
j2ee
Debugger
Membro desde: 24/08/2004 10:48:32
Mensagens: 51
Localização: São Paulo/SP
Offline
|
Se o singleton eu vou ter um objeto em memoria..então vou acessar o mesmo toda vez que chamar o singleton...o problema está ai..
se eu for pegar o valor da chave passado com parametro no properties e outro acessar ao mesmo tempo para pegar outro valor de uma outra chave....o resultado vai vim inconsistente.
ex:
chave.um = RATO
chave.dois = GATO
se os dois acessarem o properties ao mesmo tempo como vou saber qual valor vai ser retornado para cada metodo?
A pergunta é: precisa usar "syncronized" em que metodo ou não?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/08/2004 13:29:17
|
danieldestro
Moderador
![[Avatar]](/images/avatar/a5bfc9e07964f8dddeb95fc584cd965d.png)
Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline
|
Aí você já está confundindo tudo.
Neste caso não tem problema.
Cada thread vai rodar um método de modo separado. A não ser que dentro do método sejam alterados atributos do método, o que não é o seu caso.
|
gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/08/2004 13:37:53
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline
|
j2ee wrote:
ex:
chave.um = RATO
chave.dois = GATO
se os dois acessarem o properties ao mesmo tempo como vou saber qual valor vai ser retornado para cada metodo?
Êpa, peraê!!
Multithreading não significa que a classe vai retornar resutlatos inconsistentes deste jeito. Sincronização é uma primitiva de IPC para evitar Race Conditions, se você está lendo dois dados imutáveis, pode ter certeza qeu seu objeto vai retornar o resultado. O problema é se alguma outra thread alterar o valor que ele está lendo, aí você tem inconsistência.
[]s
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/08/2004 13:47:16
|
j2ee
Debugger
Membro desde: 24/08/2004 10:48:32
Mensagens: 51
Localização: São Paulo/SP
Offline
|
Vou esclarecer melhor:
tenho todos os meus sql em um arquivo properties. e tem uma classe utilizando o padrão singleton para ler o arquivo no disco rigido uma só vez. agora me expliquem qual metodo preciso syncronizar o "getInstance()" ou o "getProperty(String chave)".
ou nenhum dos dois e porque?
valeu pessoal
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/08/2004 13:50:10
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline
|
Nenhum dos dois, porque nenhum dos dois possui uma área crítica, não alteram nada.
[]s
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/08/2004 13:50:37
|
chicobento
JavaGuru
![[Avatar]](/images/avatar/c8e721e640e463f34fdd4.gif)
Membro desde: 14/06/2004 01:44:04
Mensagens: 226
Localização: Campinas
Offline
|
Bom, acho q vc deve usar synchronized em
getInstance(), pois imagine só se uma thread é paralizada após a comparação:
e antes de executar:
Aí pode ser q vem outra thread pegar uma instancia, onde arquivo ainda é null...
Resultado : vc ficaria com 2 instancias...
|
SCEA 5 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/08/2004 14:01:27
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline
|
Que tal:
[]s
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/08/2004 14:02:14
|
Rafael Steil
Administrador
![[Avatar]](/images/avatar/8e296a067a37563370ded05f5a3bf3ec.jpg)
Membro desde: 31/08/2002 02:35:53
Mensagens: 5984
Localização: São Paulo
Offline
|
Basta voce NAO fazer isso:
eh mais facil e seguro iniciar o membro no momento da declaracao:
Rafael
[editado]postei no mesmo momento em que o shoes [/editado]
|
"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"
http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/08/2004 14:07:03
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline
|
Complementando
[]s
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/08/2004 14:07:36
|
j2ee
Debugger
Membro desde: 24/08/2004 10:48:32
Mensagens: 51
Localização: São Paulo/SP
Offline
|
Rafael se eu fizer isso ele vai ler o arquivo do disco rigido de novo, pois:
estou certo?
acho que até seria melhor eu usar a classe ResouceBundle para ler o arquivo?
o que vcs acham?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/08/2004 14:09:33
|
Rafael Steil
Administrador
![[Avatar]](/images/avatar/8e296a067a37563370ded05f5a3bf3ec.jpg)
Membro desde: 31/08/2002 02:35:53
Mensagens: 5984
Localização: São Paulo
Offline
|
Como ler 2x? se voce chamar o new Arquivo() uma unica vez, o properities soh vai ser lido .. uma vez.. nao?..
O Properties eh legal.
Rafael
|
"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"
http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil |
|
|
 |
|
|