synchronized-block - sincronizados - sincronizar en java
En Java, el valor de retorno dentro del bloque sincronizado parece ser un mal estilo. ¿Realmente importa? (2)
Está absolutamente bien, ya que está regresando de un bucle, o de un bloque try
que tiene un bloque finally
apropiado. Solo debes ser consciente de la semántica, en cuyo punto tiene mucho sentido.
Ciertamente es un código más simple que introducir una variable local por el simple hecho de hacerlo:
// Ick - method body is now more complicated, with no benefit
public boolean addComponent2(Component e) {
boolean ret;
synchronized (_components) {
ret = _components.add(new WeakReference<Component>(e));
}
return ret;
}
Tengo una lista sincronizada de colecciones de WeakReference, _components;
Escribí algo como lo siguiente, esperando que el complaciente se quejara:
public boolean addComponent2(Component e) {
synchronized (_components) {
return _components.add(new WeakReference<Component>(e));
}
}
Pero el compilador está perfectamente satisfecho. Tenga en cuenta que List.add () devuelve VERDADERO. Entonces, de acuerdo, cualquier salida de un bloque sincronizado libera el bloqueo, ¿pero esto NO LOOK es extraño? Es algo así como un "agujero" en el bloque, similar a usar el retorno en un bucle.
¿Serías feliz manteniendo un código como este?
No hay nada de malo en regresar dentro de un bloque synchronized
. El bloqueo se liberará correctamente.