に私は彼らの支店コードとそのスレッドを呼び出し、多くの枝官からスレッドを(Runnableを実装して)持っています。私はブランチコードでスレッドの名前を設定しました。 問題は次のとおりです...は例外
- 実行中のスレッドで例外が発生した場合、私はそれを停止できません。 "ExceptionInInitializerError"または "OutOfMemoryError:Java heap space"という名前の別のスレッドを作成しようとすると、
- "OutOfMemoryError:Javaヒープスペース"の例外が発生します。
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();
}
}
Threadクラスは、ここで
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();
}
}
}
私はあなたが求めているものは考えています。スレッドの実行メソッド内で例外が発生した場合、例外が発生するだけで、例外を処理するエンドレスループを実装していない限り、単純に終了します。言い換えれば、あなたのスレッドが例外をヒットした場合、コードがそのメソッドから返ってきたことを確認してください(例外を記録した後など)。 – GhostCat
[実行可能なインターフェイスを実装して作成されたスレッドを停止するにはどうすればよいですか?](http://stackoverflow.com/questions/10630737/how-to-stop-a-thread-created-by-implementing-runnable-interface) –
'ExecutorService'を使用し、タスクをサブミットするときに返される' Future'を取り消します。また、 'Runnable'の代わりに' Callable'を使うこともできます。 'call()'メソッドは、明示的に処理するのではなく、チェックされた例外を投げることを許可します。 –