У меня есть Thread (реализует Runnable) от многих офицеров филиала, которые называют этот поток с их кодом ветвления. Я создал имя своего потока с кодом ветвления. Проблемы ...Запуск много потоков и стоп-потоков в Exception
- Когда в потоке потока возникло исключение - я не могу этого прекратить. И при попытке создать другой поток с любым именем «ExceptionInInitializerError» или «OutOfMemoryError: Java heap space» приходит
- Исключено исключение «OutOfMemoryError: Java heap space» При одновременном запуске 2 или более потоков.
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
Возможный дубликат [Как остановить поток, созданный при реализации runnable interface?] (Http://stackoverflow.com/questions/10630737/how-to-stop-a-thread-created-by-implementing-runnable-interface) –
Используйте «ExecutorService» и отмените «Будущее», которое возвращается, когда вы отправляете ему задание. Кроме того, вы можете использовать 'Callable' вместо' Runnable', метод 'call()' позволяет вам исключать проверенные исключения, а не обрабатывать их явно. –