Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312

    bloccare e riavviare thread

    Salve,
    ho un thread che nel costruttore contiene un intero. Dovrei bloccare questo thread, invocare una set su questo intero per poi riavviarlo. Ho scritto quanto segue:
    Thread t.interrupt();
    t.set(int i);
    t.start();
    Il compilatore mi genera questa eccezione:java.lang.IllegalThreadStateException.
    Come posso fare?
    Graie a tutti

  2. #2

    Re: bloccare e riavviare thread

    Originariamente inviato da lio.b
    Salve,
    ho un thread che nel costruttore contiene un intero. Dovrei bloccare questo thread, invocare una set su questo intero per poi riavviarlo. Ho scritto quanto segue:
    Thread t.interrupt();
    t.set(int i);
    t.start();
    Il compilatore mi genera questa eccezione:java.lang.IllegalThreadStateException.
    Come posso fare?
    Graie a tutti
    dalle api del JDK

    public void start()

    Causes this thread to begin execution; the Java Virtual Machine calls the run method of this thread.

    The result is that two threads are running concurrently: the current thread (which returns from the call to the start method) and the other thread (which executes its run method).

    It is never legal to start a thread more than once. In particular, a thread may not be restarted once it has completed execution.

    Throws:
    IllegalThreadStateException - if the thread was already started.
    See Also:
    run(), stop()

    quindi da errore perchè il thread non è ancora interrotto quando richiami start().

    devi testare che il Thread sia interrotto prima di riavviarlo con il metodo isInterrupted() o il metodo isAlive() in questa maniera

    while(t.isAlive())
    t.join(1000);

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: bloccare e riavviare thread

    Originariamente inviato da lio.b
    Dovrei bloccare questo thread, invocare una set su questo intero per poi riavviarlo. Ho scritto quanto segue:
    Il "riavviare" non è certo da intendere nel senso di poter fare start() una seconda volta!!! Una volta che un thread è stato avviato con start(), non può più essere riavviato con start() una seconda volta ... anche se il run() fosse già terminato.

    Se vuoi "sospendere" temporaneamente la esecuzione di un thread (per poi farlo proseguire in seguito) si può fare ma la cosa va gestita in modo molto "cooperativo" da parte del thread stesso.

    Ed esiste un documento della Sun che spiega bene cosa fare e sopratutto cosa non fare (e perché):
    Java Thread Primitive Deprecation
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    Ok, capito.
    Una cosa non mi è chiara...supponiamo che il mio thread contenga un intero come costruttore... una volta interrotto posso prelevare i suoi campi?
    Nel senso:
    Thread t.interrupted();
    int i = t.get(i);

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.