En días muy antiguos, solía haber una manera de "detener" o "matar" un subproceso, aunque esto ha quedado obsoleto debido a que permite la inestabilidad del sistema. Sin embargo, me di cuenta de que es posible "cancelar" un futuro en ejecución. Las comillas están ahí porque no sé cómo se trata el hilo a nivel del sistema operativo.
Para mi educación, ¿cuál es la diferencia entre cancelar un futuro, cancelar efectivamente el hilo y detener el hilo? ¿Por qué está bien cancelar, pero detener/matar un hilo en los viejos tiempos es malo?
La cancelación le dice a Future que su resultado ya no es el deseado (si aún no se ha completado) y le permite detenerse limpiamente, mientras que Thread.stop() elimina el subproceso nativo subyacente y libera todos sus monitores. El subproceso no tiene la oportunidad de concluir lo que estaba haciendo o poner nada en un buen estado conocido.
La diferencia es que uno envía un mensaje, pero permite que el destinatario responda al mensaje en sus propios términos, y el otro simplemente lo detiene a la fuerza, de manera instantánea. (Dejar que el destinatario responda a su manera puede incluso significar que el trabajo continuará ejecutándose, ya que las diferentes implementaciones de Future pueden manejar la cancelación de manera diferente, pero se ignorará cualquier resultado).
Es como la diferencia entre apagar la bandera roja en una carrera de autos, decirle a un auto que debe parar en pits en la próxima vuelta, versus poner de repente una pared en medio de la pista de carreras justo en frente del auto. en el que luego choca.