hreads Java e blocos sincronizad
Suponha que eu esteja executando umsynchronized
bloco de código dentro de algum segmento e dentro dosynchronized
block Chamo um método que gera outro thread para processar um bloco de código sincronizado que requer o mesmo bloqueio que o primeiro método. Então, no pseudo código Java:
public void someMethod() {
synchronized(lock_obj) {
// a whole bunch of stuff...
// this is the last statement in the block
(new Thread(someOtherMethod())).start();
}
// some more code that doesn't require a lock
}
public void someOtherMethod() {
// some setup code that doesn't require a lock
// return the stuff we want to run in another thread
// that does require a lock
return new Runnable() {
@Override
public void run() {
synchronized(lock_obj) {
// some more code
}
}
};
}
Não tenho idéia de como entender esse código. O que eu escrevi é legal? Sintaticamente, não vejo nenhum problema, mas não tenho certeza de como raciocinar através de códigos como esse. Então, quando eu executosomeOtherMethod()
para criar uma instância deRunnable
em que tipo de escopo o código antes da declaração de retorno é executado? Ele é executado como parte do primeiro bloco sincronizado? Suponha que existem outros threads funcionando também que podem exigir o bloqueio delock_obj
.