Domanda

su un filo modello di oggi, e quasi tutti hanno suggerito che guardo al ExecutorService.

Mentre stavo guardando in ExecutorService, penso che mi manca qualcosa. Cosa accade se il servizio sia in esecuzione o fili bloccati, e qualcuno chiama ExecutorService.shutdown (). Cosa succede ai thread in esecuzione o bloccati?

Fa l'ExecutorService attesa per quei fili per completare prima che termina?

Il motivo che mi chiedo è perché molto tempo fa quando ho usato per dilettarsi in Java, hanno deprecato Thread.stop (), e mi ricordo il modo giusto di fermare un filo era di usare sempahores ed estendere Discussione quando necessario:

public void run () {
    while (!this.exit) {
        try {
            block();
            //do something
        } catch (InterruptedException ie) {
        }
    }
}

public void stop () {
    this.exit = true;

    if (this.thread != null) {
        this.thread.interrupt();
        this.thread = null;
    }
}

Come si comporta ExecutorService thread in esecuzione?

È stato utile?

Soluzione

ExecutorService#shutdown() :

  

Iniziati un arresto ordinato in cui i compiti già presentati vengono eseguiti, ma sarà accettata nessuna nuova attività. Invocazione non ha alcun effetto aggiuntivo se già chiuso.

Così attenderà quei fili per completare.

L'alternativa è la ExecutorService#shutdownNow()

  

I tentativi di fermare tutte le attività che eseguono attivamente, fermate il trattamento dei compiti in attesa, e restituisce un elenco delle attività che sono stati in attesa di esecuzione.

     

Non ci sono garanzie di là tentativi di best-effort per interrompere l'elaborazione compiti esecuzione attivamente. Ad esempio, le implementazioni tipiche annulleranno via Thread.interrupt(), quindi qualsiasi compito che non risponde alle interruzioni non può mai terminare.

Hai solo bisogno di ascoltare su Thread#isInterrupted() nel ciclo while all'interno del run() da soli.

Altri suggerimenti

Penso che la documentazione è abbastanza chiaro! Dalla memoria, si attende che i fili completa se non gli si dice altrimenti con, credo, il metodo shutdownNow ().

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