Synchronized

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

é 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

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

não entendi, q argumento? hehehe

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

akele q eh passado no bloco:

synchronized(this){
 ....
}

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

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: