Tengo una Collections.synchronizedList de WeakReference, _components;En Java, el valor de retorno dentro del bloque sincronizado parece un mal estilo. ¿Realmente importa?
escribí algo como lo siguiente, esperando que el compilador para quejarse:
public boolean addComponent2(Component e) {
synchronized (_components) {
return _components.add(new WeakReference<Component>(e));
}
}
Pero el compilador es perfectamente satisfecho. Tenga en cuenta que List.add() devuelve TRUE. Entonces, cualquier salida de un bloque sincronizado libera el bloqueo, ¿pero esto no es extraño? Es como un "agujero" en el bloque, similar al uso de retorno en un bucle.
¿Sería feliz manteniendo un código como este?
Si bien por lo general regreso desde el interior del bloque también (en realidad, yo no me encuentro utilizando bloques de sincronización primitivos ya mucho de todos modos , pero aún así) puede haber algún beneficio al hacer esto desde el principio. Si solo tiene el bloque de sincronización, y más tarde se debe agregar un código adicional, pero ese código no requiere sincronización, entonces ya lo tiene descompuesto. Si no se desglosa, los desarrolladores futuros de prisa pueden agregar el código adicional dentro del bloque de sincronización, ya que es más fácil, lo que puede atar el monitor innecesariamente. Así que todavía devolvería el formulario dentro, pero hay algunos beneficios menores para el futuro. – corsiKa
@corsiKa: solo hay beneficios para el futuro * si * ese cambio es requerido. Si no se requiere, entonces * leer * el código es un poco más difícil todo el tiempo, IMO. –