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 