Domanda

Mi piacerebbe uccidere le discussioni che sono bloccati in stato di stallo. In primo luogo, possiamo rilevare ids discussione in stato di deadlock utilizzando il metodo findDeadlockedThreads() della classe ThreadMXBean in java.lang.management.

Poi, mi piacerebbe uccidere i filetti di ids filo, e quindi ho due questioni correlate:
(1) Come ottenere il controllo di un filo per filo id?
(2) Come uccidere un filo bloccato? Penso che invokting interrupt () metodo darà un'eccezione per il filo e ucciderà il filo.

È stato utile?

Soluzione

Dal ThreadGroup radice, si può avere la classe enumerare tutti i thread in esecuzione . Poi si può chiamare Thread.stop su quello che corrisponde al proprio ID.

Detto questo, questo è altamente pericoloso a causa del potenziale di lasciare oggetti in uno stato incoerente. Non credo che il metodo interrupt causerà un thread essere liberato che è bloccato in attesa di un blocco di sincronizzazione, quindi la (male) fermata metodi

Vedere anche: " Java Discussione Primitive Deprecation ".

Altri suggerimenti

Il metodo java.util.concurrent.Lock.lockInterruptibly () è interrompibile, il bloccaggio sincronizzato molto più comune non è. Come menzionato nella documentazione, la capacità di enumerare discussioni deadlock è inteso come un aiuto di debug e non come un mezzo per recuperare in un ambiente di produzione.

Nella produzione si è probabilmente più sicuro per uscire l'intero processo e di riavvio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top