2010-03-31 18 views

Respuesta

28

El javadoc dice por qué. SingleThreadModel fue diseñado para ser una solución fácil a la concurrencia de carga baja, pero no siquiera logramos que:

Tenga en cuenta que no SingleThreadModel resolver todos los problemas de seguridad hilo. Para el ejemplo , aún se puede acceder a atributos de sesión y variables estáticas mediante solicitudes múltiples en varios subprocesos al mismo tiempo, incluso cuando se usan los servlets SingleThreadModel . Se recomienda que un desarrollador tomar otros medios para resolver esos problemas en lugar de implementar esta interfaz , tales como evitar el uso de una variable de instancia o sincronizar el bloque del código acceder a esos recursos.

Si no puede lograr lo que se diseñó, no se debe utilizar.

11

Básicamente es una manera pobre de manejar concurrencia. Elimine el estado de su servlet, de modo que varios subprocesos puedan usar el mismo servlet simultáneamente. Mantener el estado en un "grupo" de instancias de servlet, cada una de las cuales puede tener estado restante de la solicitud anterior, etc. es bastante horrible.

1

De Java Servlet Spec:

            El uso de las garantías de interfaz SingleThreadModel que sólo una hilo a la vez va a ejecutar en el servicio método de una instancia de servlet dado. Es importante tener en cuenta que esta garantía solo se aplica a cada instancia de servlet, ya que el contenedor puede optar por agrupar dichos objetos . Los objetos que son accesibles para más de una instancia de servlet a la vez, como las instancias de HttpSession, pueden estar disponibles en cualquier momento en particular para múltiples servlets, incluidos los que implementan SingleThreadModel.
            Se recomienda que un desarrollador tomar otros medios para resolver esos problemas en lugar de implementar esta interfaz, tales como evitar el uso de una variable de instancia o sincronizar el bloque del código acceder a esos recursos. La interfaz SingleThreadModel es obsoleta en esta versión de la especificación.

4

Sí SingleThreadModel interfaz está en desuso. No lo uses. De hecho, no lo necesita, en su lugar use variables locales en lugar de campos de objetos, ya que "cada hilo obtiene su propia copia de las variables locales en Java. Simplemente eliminando el campo del objeto y reemplazándolo con una variable local, este problema de subprocesamiento en particular esta resuelto." Reference

Cuestiones relacionadas