Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [JAVA] Thread & interrupt()

    Salve ragazzi ho bisogno di sapere se ho compreso bene alcuni passaggi sulle interruzioni fra threads.

    Un thread t1 può interrompere un altro thread t2 tramite l'invocazione:
    codice:
    t2.interrupt()
    in java.lang.Thread.

    Sappiamo però che questa invocazione non comporta una vera e propria interruzione ma in realtà un flag all'interno di t2 viene settato a true.
    Se t2 è running non si accorgerà mai dell'interruzione a meno che non venga invocato il metodo statico Thread.iterrupted() che lancia l'eccezione InterruptedException e resetta il flag a false.

    <In particolare è corretta l'affermazione in grassetto?>

    Se t2 passa da uno stato running a non running (o è gia not running al momento dell'invocazione di interrupt()) tramite un wait(), join() o sleep() l'eccezione verrà lanciata senza ricorrere al metodo statico del caso running descritto precedentemente e allo stesso tempo il flag verrà resettato.


    Vorrei ora sapere se è così che funziona in realtà o sono io ad aver capito male.
    Grazie mille

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    51
    La chiamata a Thread.interrupted() non lancia un'eccezione InterruptedException, ma ne impedisce il lancio da parte del thread interrotto.

    interrupted() ti rende il valore del flag per sapere se il thread è interrotto e lo modifica facendo così in odo che non venga lanciata una InterruptedException in seguito. Se invece vuoi solo conoscere lo stato del flag senza modificarne il valore devi usare isInterrupted(), quindi senza interferire sul lancio dell'eccezione InterruptedException alla prossima azione bloccante.

    Spero di essere stato chiaro (e corretto XD)

  3. #3
    Innanzi tutto grazie per la risposta!

    Quindi un thread può entrare nel flusso di "interruzione" solo passando da uno stato di running a uno di non running tramite un wait(), join() o sleep() oppure se si trova gia in non running?

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    51
    Esatto, quando un thread è nello stato Blocked a causa di una delle chiamate dette da te è "passibile" di InterruptedException.

  5. #5
    Originariamente inviato da detrots
    Esatto, quando un thread è nello stato Blocked a causa di una delle chiamate dette da te è "passibile" di InterruptedException.
    Ora capisco! Grazie mille di nuovo!

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    51
    Prego

  7. #7
    Quindi un thread può entrare nel flusso di "interruzione" solo passando da uno stato di running a uno di non running tramite un wait(), join() o sleep() oppure se si trova gia in non running?
    Scusate se riesumo questa discussione, ci sono arrivato da Google.
    Ho una perplessita', se un thread e' in attesa di qualcosa, per esempio e' in attesa di essere accettato dal server, e' nello stato blocked? Quindi genera un eccezione Interrupted?

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    direi che in quel caso più che interrotto è in wait (cioè in attesa che si verifichi l'evento bloccante).

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.