Duvida sobre synchronized - [Resolvido]  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
laudenpower
JavaEvangelist
[Avatar]

Membro desde: 28/12/2008 21:00:08
Mensagens: 349
Offline

Olá, gostaria de saber se quando eu tenho um método sincronizado em um objeto, quando outra thread tenta acessar outro método desse objeto o mesmo é lockado?

Pergunto isso por que nesse artigo o autor diz que o objeto inteiro é sincronizado.

http://www.dsc.ufcg.edu.br/~jacques/cursos/map/html/threads/sincronizacao.html

Nesse caso se não for, como posso sincronizar o objeto inteiro para que quando uma thread estiver utilizando, outra espere o acesso ao mesmo?

Desde já agradeço a todos.

This message was edited 1 time. Last update was at 03/02/2010 11:35:40


Enquanto cultivares teu saber, nada tens a temer!

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999
asaudate
GUJ Master
[Avatar]

Membro desde: 01/09/2007 19:31:41
Mensagens: 1794
Localização: São Paulo
Offline

laudenpower wrote:Olá, gostaria de saber se quando eu tenho um método sincronizado em um objeto, quando outra thread tenta acessar outro método desse objeto o mesmo é lockado?

Pergunto isso por que nesse artigo o autor diz que o objeto inteiro é sincronizado.

http://www.dsc.ufcg.edu.br/~jacques/cursos/map/html/threads/sincronizacao.html

Nesse caso se não for, como posso sincronizar o objeto inteiro para que quando uma thread estiver utilizando, outra espere o acesso ao mesmo?

Desde já agradeço a todos.


Sim, um método sincronizado pega o lock no objeto inteiro (lembrando que os métodos wait e notify, por exemplo, são feitos em cima do objeto, não da thread). Esse lock só é liberado se a thread fizer uma chamada a wait(), por exemplo.

[]´s

Alexandre Saudate
__________________________

Do not try to bend the spoon - that's impossible. Instead, only try to realize the truth: there is no spoon.

Série quickstart: Spring+Spring Security+Jersey (REST) +Hibernate (JPA) -> https://github.com/alesaudate/kickstart-springjerseyhibernate

Evite usar Axis2!!! Leia aqui para mais detalhes!

@alesaudate
Quer ler um blog especializado em web services e SOA?

laudenpower
JavaEvangelist
[Avatar]

Membro desde: 28/12/2008 21:00:08
Mensagens: 349
Offline

Então nesse caso se uma thread acessa o objeto, enquanto ela estiver utilizando o método sincronizado, as demais threads deverão esperar até essa thread terminar o processamento? Nesse caso o lock só é utilizado no momento do acesso ao método sincronizado ou no acesso a qualquer método da do objeto (incluindo os não sincronizados?)

Desde já gostaria de agradecer a atenção e gostaria de me colocar a disposição para ajuda-lo no que estiver ao meu alcance

Enquanto cultivares teu saber, nada tens a temer!

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999
mochuara
GUJ Master
[Avatar]
Membro desde: 20/05/2009 11:21:32
Mensagens: 1776
Offline

laudenpower wrote:Olá, gostaria de saber se quando eu tenho um método sincronizado em um objeto, quando outra thread tenta acessar outro método desse objeto o mesmo é lockado?


Se o outro método for sincronizado, sim.

laudenpower wrote:
Nesse caso se não for, como posso sincronizar o objeto inteiro para que quando uma thread estiver utilizando, outra espere o acesso ao mesmo?

Desde já agradeço a todos.


Coloca synchronized em todos os metodos publicos do objetos.
asaudate
GUJ Master
[Avatar]

Membro desde: 01/09/2007 19:31:41
Mensagens: 1794
Localização: São Paulo
Offline

Vale lembrar que o método sincronizado pede o lock em cima do objeto, e a thread espera enquanto não obtiver o lock. Se o método não for sincronizado, a thread não vai requerer o lock e vai executar normalmente.

[]´s

Alexandre Saudate
__________________________

Do not try to bend the spoon - that's impossible. Instead, only try to realize the truth: there is no spoon.

Série quickstart: Spring+Spring Security+Jersey (REST) +Hibernate (JPA) -> https://github.com/alesaudate/kickstart-springjerseyhibernate

Evite usar Axis2!!! Leia aqui para mais detalhes!

@alesaudate
Quer ler um blog especializado em web services e SOA?

laudenpower
JavaEvangelist
[Avatar]

Membro desde: 28/12/2008 21:00:08
Mensagens: 349
Offline

Desde já gostaria de agradecer a todos que ajudaram para que dessa forma eu possa encerrar a minha participação nesse tópico. Desde já muito obrigado

Enquanto cultivares teu saber, nada tens a temer!

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team