Devo essere in grado di inserire un codice di uscita per il thread corrente in esecuzione. Ho lottato con questo per un po ', e alla fine ho si avvicinò con una soluzione qui è un codice simile a quello che sto facendo:Richiamata richiamata thread
public static void injectThreadExitCallback(final Runnable callback) {
final curr = Thread.currentThread();
new Thread() {
@Override
public void run() {
try {
curr.join();
callback.run();
} catch (InterruptedException ex) {
... logging ...
}
}
}.start();
}
Sembra funzionare bene e fa esattamente quello che sto volendo, la mia unica preoccupazione è, se questo causa qualche perdita o altri effetti collaterali indesiderati, che io possa non vedere.
oppure è perfettamente funzionante, se così è abbastanza utile. Potrei vedere una semplice libreria che può aggiungere dinamicamente il codice di uscita ai thread esistenti.
Sembra buono; solo essere consapevoli del fatto che il callback verrà eseguito su un thread separato. –
Spostare il callback sul blocco 'finally' significa che verrà eseguito se' join' genera un'eccezione che si verificherà * prima * che il thread di destinazione è terminato. Inoltre, join non genererà mai un'eccezione a meno che alcuni agenti esterni non inizino a interrompere tutti i thread. –
Se il thread anonimo che si crea all'interno di questo metodo viene interrotto, è altamente discutibile se il callback debba essere richiamato. Il punto in cui si interrompe un thread è interrompere ciò che sta facendo. Poiché l'unica cosa che questo thread sta facendo è in attesa di richiamare il callback, l'unica ragione per interromperlo sarebbe impedire l'esecuzione del callback. –