Ayudo a mantener y construir sobre una GUI Swing bastante grande, con mucha interacción compleja. A menudo me encuentro arreglando errores que son el resultado de que las cosas entren en estados extraños debido a alguna condición de carrera en algún otro lugar del código.Análisis de hilos estáticos: ¿Buena idea?
A medida que la base de código aumenta, he descubierto que ha sido menos consistente al especificar mediante la documentación qué métodos tienen restricciones de enhebrado: lo más común es que se deben ejecutar en Swing EDT. Del mismo modo, sería útil conocer y proporcionar conocimiento estático en el que (de nuestros auditores personalizados) se notifican en el EDT por especificación.
Así que se me ocurrió que esto debería ser algo que podría aplicarse fácilmente mediante el uso de anotaciones. Y he aquí, existe al menos una herramienta de análisis estático, CheckThread, que utiliza anotaciones para lograr esto. Parece que le permite declarar que un método se limita a un hilo específico (más comúnmente el EDT), y marcará los métodos que intentan llamar a ese método sin declarar que están confinados a ese hilo.
Así que en la superficie, esto parece una adición de poca ganancia y gran dolor a la fuente y el ciclo de construcción. Mis preguntas son:
- ¿Hay alguna historia de éxito para las personas que usan CheckThread o bibliotecas similares para hacer cumplir las restricciones de subprocesos? ¿Alguna historia de fracaso? ¿Por qué tuvo éxito/falló?
- ¿Esto es bueno en teoría? ¿Hay desventajas teóricas?
- ¿Esto es bueno en la práctica? ¿Vale la pena? ¿Qué tipo de valor tiene entregado?
- Si funciona en la práctica, ¿cuáles son las buenas herramientas para apoyar esto? Acabo de encontrar CheckThread pero admito que no estoy del todo seguro de lo que estoy buscando para encontrar otras herramientas que hagan lo mismo.
Sé que es correcto para nosotros depende de nuestro escenario. Pero nunca he oído hablar de personas que usan algo como esto en la práctica, y para ser honesto, no parece haberse apoderado de una navegación general. Entonces me pregunto por qué.
Por cierto, me encantaría escuchar una discusión relevante, incluso si no pertenece específicamente a Java o al EDT. –
No sé lo suficiente sobre Swing porque paso todo mi tiempo en tierra servlet ... pero la única forma de escribir servlets que son seguros para hilos más que solo suerte es tener mucho cuidado al diseñar cosas que siguen ciertos patrones comunes . Si algo así te anima a limpiar tu código, entonces genial. Pero creo que, en cierto modo, el hilo de seguridad tiene que venir de una codificación cuidadosa. Sin embargo, esto puede ser una buena solución temporal en una base de código existente. – bwawok
No estoy seguro de que me guste la idea de recompensas para wiki de la comunidad, pero esto no está recibiendo mucha atención, así que estoy comenzando uno de todos modos. Realmente no puedo decirle los criterios exactos que usaré para determinar una respuesta correcta en este momento. –