Quando un Thread.interrupt()
viene chiamato su qualche thread, cosa succede a quel thread?Quando su alcuni thread viene chiamato Thread.interrupt(), cosa succede?
risposta
Il thread di destinazione è "interrotto". Per lo più, in quel thread viene impostato un flag, a cui il thread può guardare (con Thread.interrupted()
). Se il thread di destinazione era attualmente bloccato su alcuni I/O o Object.wait()
, viene risvegliato con, rispettivamente, uno InterruptedIOException
o uno InterruptedException
.
L'interruzione del filo è un modo delicato per spingere un filo. È usato per dare ai thread la possibilità di uscire cleanly, al contrario di Thread.stop()
, che è più come sparare alla discussione con un fucile d'assalto.
'InterruptedIOException' è improbabile è pratica. L'I/O interrompibile è stato abilitato in Solaris brevemente, ma non ne vale la pena. Ovviamente l'implementazione è specifica per l'implementazione. Tipicamente (negli ultimi tempi) il sistema operativo avrà qualcosa a che fare con i thread. –
+1 per la spiegazione da soli e il confronto di shoting. – helios
Il Javadoc for that method spiega cosa succede in quale situazione.
Ecco JDK 1.6 Javadoc:
Interrupt questo thread.
meno che il thread corrente è stessa interruzione, che è sempre consentito, il metodo di CheckAccess questo filo è richiamato, che può causare una SecurityException essere gettato.
Se questa discussione è bloccato in una invocazione del wait(), attendere (lungo), o attendere (long, int) metodi della classe oggetto, o del join(), join (lungo), join (long, int), sleep (long), o sleep (long, int), metodi di questa classe, quindi il suo stato di interruzione verrà cancellato e riceverà un InterruptedException.
Se questa discussione è bloccato in una O operazione/I su un canale interrompibile il canale sarà chiuso, lo stato di interruzione del thread sarà impostato, e il thread riceverà un ClosedByInterruptException.
Se questa discussione è bloccato in un Selettore poi stato di interrupt del thread viene impostata e tornerà immediatamente dall'operazione selezione , eventualmente con uno zero non valore, come se il selettore sveglia metodo sono stati invocati.
Se nessuna delle condizioni precedenti è , allora verrà impostato lo stato dell'interrupt di questo thread .
L'interruzione di un thread che non è attivo non ha alcun effetto.
ZeissS è corretto, la segnalazione è il modo più pulito per farlo. puoi anche catturare l'eccezione di interrupt e pulire in questo modo.
- 1. Cosa succede quando viene chiamato "return" da un blocco "using"?
- 2. Cosa succede agli altri thread quando un thread si biforca()?
- 3. Cosa succede dopo che un metodo viene chiamato in Java
- 4. Cosa succede quando viene violata la politica di thread di Swing?
- 5. cosa succede quando una discussione genera un'eccezione?
- 6. Quando viene chiamato ServiceConnection.onServiceDisconnected()?
- 7. Cosa succede quando un thread .NET genera un'eccezione?
- 8. Quando viene chiamato 'drawRect'?
- 9. Cosa succede a un database Sqlite quando l'app viene rimossa
- 10. Quando viene chiamato un corpo su Load?
- 11. Java: cosa succede quando un nuovo thread viene avviato da un blocco sincronizzato?
- 12. Cosa succede ai thread e alle visualizzazioni di un'attività quando viene distrutta?
- 13. Quando viene chiamato CanExecute?
- 14. View.onDraw() --- quando viene chiamato?
- 15. Quando viene chiamato didRegisterForRemoteNotificationsWithDeviceToken?
- 16. Cosa succede quando viene assegnato un tipo contenente un lambda?
- 17. Cosa succede quando l'host della finestra mobile viene riavviato?
- 18. Cosa viene chiamato dopo "onConfigurationChanged()"?
- 19. Cosa succede se System.exit viene chiamato da un hook di chiusura?
- 20. Quando viene chiamato viewDidLoad?
- 21. Quando viene chiamato DbConnection.StateChange?
- 22. Quando viene chiamato __repr __()?
- 23. cosa succede esattamente quando `enableProdMode()`
- 24. Cosa succede se JWT viene rubato?
- 25. Cosa succede se una scrittura su localStorage viene cancellata?
- 26. Cosa succede quando aggiorniamo una pagina web?
- 27. cosa succede quando si verificano due eccezioni?
- 28. Cosa succede sotto il cofano quando presentiamoViewController?
- 29. Quale metodo viene chiamato su UIView quando viene ridimensionato dall'autolayout?
- 30. Cosa determina cosa viene scritto in un puntatore C++ quando viene chiamato delete?
Puoi essere più specifico? Mi sembra che la documentazione ne parli abbastanza bene: http://java.sun.com/javase/6/docs/api/java/lang/Thread.html # interrupt() Sto assumendo che ci sia qualcosa che non sta chiarendo, però, se puoi affinare la tua domanda? –