[FIXED] So erhalten Sie einen Thread, der an den Ausführungsdienst gesendet wird, und unterbrechen ihn in Java

Ausgabe

Ich habe einen Executor-Dienst und möchte die Ausführung einiger Threads abbrechen/unterbrechen.

Zum Beispiel: Unten ist meine Thread-Klasse, die den Thread-Namen nach einem bestimmten Intervall endlos ausgibt.

public class MyThread implements Runnable {
String name;

public MyThread(String name) {
    this.name = name;
}

@Override
public void run() {
    try {
        System.out.println("Thread "+ name + " is running");
        sleep(500);
    }catch (InterruptedException e){
        System.out.println("got the interrupted signal");
    }
}
}

Jetzt erstelle ich mehrere Threads, indem ich ihnen Namen gebe, damit ich später einen bestimmten Thread mit seinem Namen stoppen kann.

Wie unten gezeigt, erstelle ich 4 Threads und möchte die Ausführung von 2 Threads mit den Namen foo und bar stoppen .

public class ThreadTest {

public static void main(String[] args) {
    ExecutorService executorService = Executors.newCachedThreadPool();
    MyThread amit = new MyThread("foo");
    MyThread k = new MyThread("bar");
    MyThread blr = new MyThread("tel-aviv");
    MyThread india = new MyThread("israel");
    executorService.submit(foo);
    executorService.submit(bar);
    executorService.submit(tel-aviv);
    executorService.submit(israel);
}
}

Lösung

Ihre MyThreads werden nicht wirklich auf Threads mit diesen Namen ausgeführt. Sie werden nicht direkt als Threads ausgeführt, sondern auf den ExecutorServiceThreads von .

Sie müssen also eine Zuordnung von name zu Futurebeibehalten und dann die Zukunft stornieren, wenn Sie möchten.

Map<String, Future<?>> map = new HashMap<>();
map.put("amit", executorService.submit(amit));
map.put("k", executorService.submit(k));
// ... etc

Dann zum Stornieren amit:

map.get("amit").cancel(true);

Natürlich hätte man auch einfach explizite Variablen behalten können:

Future<?> amitFuture = executorService.submit(amit);
amitFuture.cancel(true);

Dies kann jedoch unhandlich sein, wenn Sie viele Variablen haben.


Beantwortet von –
Andy Turner


Antwort geprüft von –
Senaida (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like