Me he encontrado con un código como las siguientes varias vecessincronizada con un objeto ficticio en lugar de esta
class Foo {
private Object lock = new Object();
public void doSomething() {
synchronized(lock) {
...
Lo que me interesa es por qué se crea un objeto de bloqueo en lugar de escribir synchronized(this)
? ¿Está ahí para permitir compartir el bloqueo? Recuerdo vagamente haber leído que se trata de una optimización. ¿Es eso cierto? Además, ¿tiene sentido, en algún contexto, tener el bloqueo declarado como final
?
Esta pregunta se responde aquí: http://stackoverflow.com/a/3369303/1343161 – Keppil