Fala pessoal,
to trabalhando com programação concorrente e minha dúvida é a seguinte: Qd eu uso um método “Syncronized” todos os atributos da classe a qual pertence o método ficam protegidos pela exclusão mutua? ou soh os atributos que estão sendo utilizados pelo método?
Na especificação do J2SE 1.5, existem novas classes pra trabalhar com programação concorrente, por exemplo, o pacote “java.util.concurrente.locks” possui um método chamado “lock” utilizado para exclusão mútua logicamente, a minha dúvida persiste em saber se esta exclusão mútua vale para todos os atributos da classe ou para apenas aqueles atributos que estão contidos entre a chamada de “lock” e “unlock”.
Não, você está sincronizando apenas o bloco de código sincronizado (ugh), seja método ou não.
I
igorps
e se eu utilizar “syncronized (objeto){}”
neste caso eu vou estar protegendo por exclusão mutua todos os atributos do “objeto”… certo?
pcalcado
Não, você vai estar adquirindo um lock para aquele objeto, qualquer outra thread que tente adquirir este lock terá que esperar até você o soltar.
saoj
O Java não protege nada. Quem protege é vc dentro de um bloco synchronized.
I
igorps
Não, você vai estar adquirindo um lock para aquele objeto, qualquer outra thread que tente adquirir este lock terá que esperar até você o soltar.
pois eh…qd vc diz q eu vou tah adiquirindo um lock pro objeto…isso keh dize o q ? o q quer dizer esse lock? não quer dizer que eu “tranco” tudo que o objeto encapsula e assim evito que outras threads acessem esses atributos encapsulados?
I
igorps
por exemplo…eu tenho o metodo syncronized em um objeto…ou seja eu pego o lock do objeto…vamos supor que outra thread comece a executar e tente acessar “objeto.atributo1” ou “objeto.metodo1”…esta thread vai conseguir executar estes comandos e acessar os atributos do objeto? ou qd esta thread for tentar acessar estes atributos ela vai esperar até a primeira thread liberar o lock?
pcalcado
Nao, um lock eh um conceito. Quando voce faz um lock em algo, ningue, consegue fazer um lock neste mesmo elemento enquanto voce detiver o lock. Isso nao vai influenciar o objeto em questao exceto pelo fato de que ele nao vai mais poder ser usado como lick.
De uma olhada na docuemntaçao de Threads, o que voce quer esta la
Rubem_Azenha
pcalcado:
Não, você está sincronizando apenas o bloco de código sincronizado (ugh), seja método ou não.
pq o “(ugh)”?
é por que colocar syncronized nos métodos deixa o código mais lento e devesse usar o syncronized para sincronizar apenas os objs que vc quer sincronizar?
ou por outro motivo?
pcalcado
Nao, eh pela cacofonia mesmo, alias este topico ta cheio.
Thiago_Senna
cacofonia???
Que isso? É alguma mistura entre o caco namorado da PIG (daquele desenho que tinha o gonzo…) + Sinfonia…???
s. f., som desagradável ou palavra obscena que resulta da ligação das letras finais de uma palavra com as letras iniciais da palavra seguinte.
Opa… valeu…
Vou procurar usar essa nova palavra que aprendi no meu dia a dia. Ao invés de mandar alguém calar a boca, vou dizer para eles parar de cacofonar… :mrgreen: