2011-07-06 15 views
8

Tenemos un escenario en el que varios hilos llamar a un método estático como la siguiente:acceso simultáneo a un método estático utilidad

public static boolean isEmpty(final String s) { 
    return s == null || s.length() < 1; 
} 

Podría causar un problema de inconsistencia si 100 hilos llaman?

+1

's.length() == 0' es más barato que' s .length() <1', y String no puede tener una longitud inferior a cero. – sudocode

+1

@sudocode O use 'String.isEmpty'. –

Respuesta

19

No. Esto no sufrirá ningún problema de simultaneidad.

1) El parámetro se pasa en es una cadena que es una clase inmutable (su valor no se puede modificar)

2) El método no trata de modificar cualquier estado compartido

+0

Hace la diferencia si el parámetro es mutable. Por ejemplo, si la firma de la función es: 'public static boolean isEmpty (String s) {...}' – broadband

4

El método hace no acceder a ningún estado compartido. Por lo tanto, no, no causará ningún problema.

4

No, porque no hay un estado compartido. Incluso si llama a este método con la misma cadena s, sigue siendo seguro ya que String es inmutable y seguro para subprocesos.

BTW StringUtils.isEmpty() método en Apache Commons hace lo mismo.

0

siendo 's' la variable pasada y no hay nada más definido en el método no debería haber ningún problema en el caso de 100 hilos llamándolo

Cuestiones relacionadas