Saltar al contenido

Conservar el seguimiento de la pila de Java en los subprocesos

Luego de mucho batallar pudimos encontrar la contestación de esta dificultad que tantos usuarios de este espacio tienen. Si deseas aportar algo más no dejes de aportar tu información.

Solución:

Siguiendo mi comentario, esto es en realidad lo que tenía en mente. Eso sí, no tengo una forma de probarlo en este momento.

Lo que pasas de tu subproceso principal es New Exception().getStackTrace(). O mejor aún, como comentó @Radiodef, Thread.currentThread().getStackTrace(). Así que es básicamente un StackTraceElement[] array.

Ahora, puedes tener algo como:

public class CrossThreadException extends Exception 

    public CrossThreadException( Throwable cause, StackTraceElement[] originalStackTrace ) 

        // No message, given cause, no supression, stack trace writable
        super( null, cause, false, true );

        setStackTrace( originalStackTrace );
    

Ahora en su cláusula de captura puede hacer algo como:

catch ( Throwable cause ) 
   LOG( "This happened", new CrossThreadException( cause, originalStackTrace ) );

Lo que le dará un límite entre los dos rastros de pila.

Puedes usar el Future objeto que regresó de su invocación de envío, luego invoque el get() método, si ocurriera alguna excepción durante la ejecución de la tarea, se volverá a lanzar.

Otra opción es personalizar el controlador de excepciones predeterminado para la fábrica de subprocesos que crea los subprocesos para su ExecutorService. Ver para más detalles: Thread.UncaughtExceptionHandler

Si entiendes que ha sido de ayuda nuestro post, te agradeceríamos que lo compartas con el resto desarrolladores de esta manera contrubuyes a extender nuestro contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *