¿Hay alguna manera de interrumpir un futuro sin cancelarlo?Concurrencia: interrumpir un futuro sin cancelarlo
booleano cancelar (booleano) mayInterruptIfRunning
intentos para cancelar la ejecución de esta tarea. Este intento fallará si la tarea ya se completó , ya se ha cancelado o no podría ser cancelada por algún otro motivo. Si tiene éxito, y esta tarea no se ha iniciado cuando se invoca cancel, esta tarea nunca debería ejecutarse. Si la tarea ya ha comenzado, entonces el parámetro mayInterruptIfRunning determina si el hilo que ejecuta esta tarea debe ser interrumpido en un intento de detener la tarea.
Para capturar la interrupción, debemos capturar apropiadamente la Excepción interrumpida o verificar el método isInterrupted() dentro del método Runnable/Callable.
Pero no hay manera de interrumpir un Futuro está ejecutando con la interfaz de futuro
Dado que todos los hilos están en la piscina Servicio Ejecutor, nadie puede hacer thread.interrupt(). ¿Es por eso que se ha asumido que cualquier interrupción vendrá solo cuando se cancela un futuro o termina un grupo de subprocesos?
Estoy tratando de entender por qué no hay un método de interrupción en la interfaz de Future. Cualquier ayuda será muy apreciada
Me pregunto cuál sería el punto de esto ... es una pregunta interesante, si no es que extraña. –
debido a algunos problemas. 1.) interrumpir es un riesgo, nunca se sabe cuándo o cuándo se puede interrumpir la tarea, 2.) El futuro no está vinculado a ningún hilo. Interrumpir el hilo de Future podría hacer quebrar otros futuros, 3.) Utilizando el mecanismo de cancelación, estás evitando uno de los errores más comunes relacionados con las carreras y el bloqueo, 4.) obtienes una gran garantía de que tu código no se detendrá de forma aleatoria. estado. – Rekin
"Un futuro representa el resultado de un cálculo asincrónico": ¿no sería peligroso interrumpir una entidad asincrónica ya que el hilo de llamada puede continuar funcionando y está esperando recibir noticias de la entidad asincrónica? –