Synchronized

6 respostas
F

dae galera,

o synchronized serve para q uma parte do codigo nao possa ser executada por duas ou mais thread ao mesmo tempo, certo?
soh q eu to com umas duvidas…

tipo, se eu tiver os metodos A e B sincronizados, e tiver as Threads T1 e T2, a T1 vai poder executar o metodo A ao mesmo tempo q a T2 executa o metodo B?

e nesse caso:

public synchronized void a(){
 b();
 ...
}

se eu tiver uma thread q tenha entrado no metodo a e ido pro metodo b, enquanto essa thread estiver no metodo b, uma segunda thread podera ir para o metodo a?

e tipo, como funciona qndo nao eh um metodo que eh sincronizado, e sim um bloco de codigo?

vlw

6 Respostas

M

é o seguinte felipe, qnd a Thread T1 tiver o lock do objeto, só ela pode executar os metodos sincronizados, qnd ela estiver executando o metodo “a”, nenhuma outra thread vai poder executar o metodo “b”, pois T1 tem o lock do objeto…, então, esse é o lance, qnd uma thread tem o lock, só ela pode executar o codigo sincronizado, o mesmo serve pra blocos de codigo

F

e qnto ao bloco, e o argumento??? dai eh funciona como se o bloco fosse da classe do argumento???

M

não entendi, q argumento? hehehe

C

Blocos synchronized funcionam da mesma forma que métodos synchronized.

Só um detalhe, 2 Threads não acessam 2 métodos synchronized do mesmo objeto, mas se for de objetos diferentes (da mesma classe), nada impede isso.

[]'s
carisio

F

akele q eh passado no bloco:

synchronized(this){
 ....
}

no casos eria o this, mas asvezes eh outra classe… dai como q fica?

M

o argumento é o objeto q tu quer adquirir o bloqueio, no caso, this, esta pegando o bloqueio do proprio objeto q esta executando o código, de uma olhada em codigos produtor/consumidor :slight_smile:

Criado 20 de novembro de 2004
Ultima resposta 22 de nov. de 2004
Respostas 6
Participantes 3