¿Metodos static sincronizados?

xenaix
29 de Junio del 2005
Hola

Una duda me corroe. Si los métodos static son mantenidos como una única instancia para todo el que los use, ¿hay que sincronizarlos cuando vaya a acceder desde diferentes hilos?
¿La JVM no se preocupa de eso?

Gracias

chuidiang
29 de Junio del 2005
Hola:

Lo de sincronizar no tiene que ver con que el código sea común o no.
Hay que sincronizar si hay un grupo de operaciones que deben realizarse sin intromision de otro hilo para garantizar que salen bien, sea o no el método estático.

Por ejemplo, imagina que tienes una lista y hay un hilo que va a escribir en pantalla el contenido de la lista. Normalmente se hace un bucle para el numero de elementos de la lista y se van escribiendo

Imagina que hay ademas otros hilos que añaden o borran elementos de la lista. Es posible que mientras el primer hilo esta en su bucle, estos otros se dediquen a borrar o añadir elementos. El resultado es que el bucle puede fallar.

Este es el motivo de sincronizar. Mientras el hilo esta escribiendo la lista, ningún otro hilo debería modificarla, independientemente de que se haga con métodos estáticos o no.

Se bueno.

xenaix
29 de Junio del 2005
Pero esa lista. ¿Sería una variable de clase? Es decir, cada hilo que accede al método estático tendrá las variables internas privadas y solo se comparten las variables de clase a las que esta acceda, o las variables dentro del método estático también se comparten.

xenaix
29 de Junio del 2005
Por lo que he leido por ahí parece ser que los métodos estáticos son privados, ya que dicen que se usan para clases de utilidad (que es lo que yo quiero hacer). Me imagino que el código estará siempre en memoria, pero que las variables son creadas nuevas para cada hilo que lo usa.
¿Se carga esa clase la primera vez que la llamas y luego permanece siempre en memoria? Lo digo por usarla en una aplicación web y que no ralentizase las peticiones cada vez que alguien la usa.