Ich habe einen Thread (implementiert Runnable) von vielen Zweig-Officer aufrufen, dass Thread mit ihrer Branche Code. Ich habe einen Namen ihres Threads mit dem Branch Code eingerichtet. Die Probleme sind ...Laufen viele Thread-und Stop-Thread auf Ausnahme
- Wenn eine Ausnahme Thread in Lauf aufgetreten - das kann ich nicht mehr aufhören. Und wenn Sie versuchen, einen anderen Thread mit einem beliebigen Namen "ExceptionInInitializerError" oder "OutOfMemoryError: Java-Heap-Speicherbereich" kommt
- "OutOfMemoryError: Java-Heap-Space" Ausnahme kommt Wenn 2 oder mehr Thread zur gleichen Zeit ausgeführt wird.
public MyRunnerClass {
//This method called from many branch with their branch Code
public void executeBranchProcess(String branchCode){
Thread t = new Thread(new Exporter(branchCode);
t.setName(branchCode);
t.start();
}
}
Klasse Thread hier
public class Exporter implements Runnable{
private String branchCode;
public Exporter(String branchCode){
this.branchCode = branchCode;
}
@Override
public void run() {
try {
exportCorner();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private void exportCorner() throws InterruptedException{
try{
//Some Process
}catch(Exception e){
// I want to close running thread here
// I am using closeThread(this.branchCode), but not working
}
}
static void closeThread(String branchCode) throws InterruptedException {
Thread thread = null;
for (Thread t : Thread.getAllStackTraces().keySet()) {
if (t.getName().equals(branchCode))
thread = t;
}
if (thread != null) {
thread.interrupt();
thread.join();
}
}
}
Ich habe keine Ahnung, was Sie fragen. Wenn innerhalb der Run-Methode eines Threads eine Exception auftritt, dann stirbt sie einfach ab (es sei denn, es wird eine Art Endlosschleife implementiert, die einfach Ausnahmen verschlingt, anstatt auf sie zu reagieren). Mit anderen Worten: Wenn Ihr Thread eine Exception erreicht, stellen Sie einfach sicher, dass Ihr Code von dieser Methode "zurückkehrt" (zum Beispiel nach der Protokollierung der Exception) und Sie sollten gut sein. – GhostCat
Mögliches Duplikat von [Wie man einen Thread stoppt, der durch die Implementierung der Runnable-Schnittstelle erstellt wurde?] (Http://stackoverflow.com/questions/10630737/how-to-stop-a-thread-created-by-implementing-runnable-interface) –
Verwenden Sie einen 'ExecutorService' und brechen Sie die' Zukunft' ab, die zurückgegeben wird, wenn Sie eine Aufgabe an sie senden. Außerdem können Sie 'Callable' anstelle von' Runnable' verwenden, dessen Methode 'call()' Ihnen erlaubt, überprüfte Ausnahmen zu werfen, anstatt sie explizit zu behandeln. –