Uccidi thread in Java

Rupam Yadav 12 ottobre 2023
  1. Elimina o interrompi un thread utilizzando un flag booleano in Java
  2. Uccidi o interrompi un thread usando interrupt() in Java
Uccidi thread in Java

I thread in Java ci consentono di eseguire diverse attività in parallelo, il che consente il multitasking. Possiamo creare un thread in Java usando la classe Thread. In questo articolo, introdurremo due metodi per uccidere un thread.

Sebbene il thread venga distrutto dal metodo run() della classe Thread una volta che ha completato tutti i compiti, a volte potremmo voler uccidere o fermare un thread prima che abbia terminato completamente l’esecuzione.

Elimina o interrompi un thread utilizzando un flag booleano in Java

Per terminare esplicitamente un thread, possiamo utilizzare un flag booleano per notificare al thread quando interrompere l’attività. Sotto, due thread stampano una riga con il suo nome, quindi entrambi i thread dormono per circa 100 millisecondi. I thread vengono eseguiti fino a quando il flag booleano exitThread diventa vero.

thread1 e thread2 sono due thread creati e in entrambi viene passato un nome come argomento. Poiché il costruttore della classe ExampleThread ha thread.start()che avvia l’esecuzione di un thread, entrambi i thread verranno eseguiti. Possiamo vedere che l’output stampa i nomi di entrambi i thread in modo casuale perché vengono eseguiti parallelamente.

Per fermare il thread, chiameremo stopThread(), che è un metodo in ExampleThread che imposta exitThread su true, e il thread alla fine si ferma perché while(!exitThread) diventa false.

public class KillThread {
  public static void main(String[] args) {
    ExampleThread thread1 = new ExampleThread("Thread One");
    ExampleThread thread2 = new ExampleThread("Thread Two");

    try {
      Thread.sleep(500);
      thread1.stopThread();
      thread2.stopThread();
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    System.out.println("**Exiting the main Thread**");
  }
}

class ExampleThread implements Runnable {
  private String name;
  private boolean exitThread;
  Thread thread;

  ExampleThread(String name) {
    this.name = name;
    thread = new Thread(this, name);
    System.out.println("Created Thread: " + thread);
    exitThread = false;
    thread.start();
  }

  @Override
  public void run() {
    while (!exitThread) {
      System.out.println(name + " is running");
      try {
        Thread.sleep(100);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }

    System.out.println(name + " has been Stopped.");
  }

  public void stopThread() {
    exitThread = true;
  }
}

Produzione:

Created Thread: Thread[Thread One,5,main]
Created Thread: Thread[Thread Two,5,main]
Thread Two is running
Thread One is running
Thread Two is running
Thread One is running
Thread One is running
Thread Two is running
Thread One is running
Thread Two is running
Thread One is running
Thread Two is running
**Exiting the main Thread**
Thread Two has been Stopped.
Thread One has been Stopped.

Uccidi o interrompi un thread usando interrupt() in Java

Useremo qui l’esempio precedente, ma con un nuovo metodo chiamato interrupt(). Questa funzione interrompe immediatamente l’esecuzione quando viene chiamata su un thread. In questo esempio, stiamo usando thread.isInterrupted() per controllare se interrupt() è stato chiamato.

Per fermare entrambi i thread, chiameremo thread1.thread.interrupt() e thread2.thread.interrupt() con la conseguente terminazione dei thread.

public class KillThread {
  public static void main(String[] args) {
    ExampleThread thread1 = new ExampleThread("Thread One");
    ExampleThread thread2 = new ExampleThread("Thread Two");

    try {
      Thread.sleep(6);
      thread1.thread.interrupt();
      thread2.thread.interrupt();
      Thread.sleep(8);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }

    System.out.println("**Exiting the main Thread**");
  }
}

class ExampleThread implements Runnable {
  private String name;
  Thread thread;

  ExampleThread(String name) {
    this.name = name;

    thread = new Thread(this, name);
    System.out.println("Created Thread: " + thread);

    thread.start();
  }

  @Override
  public void run() {
    while (!thread.isInterrupted()) {
      System.out.println(name + " is running");
    }

    System.out.println(name + " has been Stopped.");
  }
}

Produzione:

Created Thread: Thread[Thread One,5,main]
Created Thread: Thread[Thread Two,5,main]
Thread One is running
Thread Two is running
Thread One has been Stopped.
Thread Two has been Stopped.
**Exiting the main Thread**
Autore: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

Articolo correlato - Java Thread