0
Я пытаюсь создать новую ветку в другом потоке. Я не могу остановить поток ни на что. Есть ли способ, по которому я могу выйти из строя после выполнения операций.Thread not stopping
package p.Threads;
public class Thread2 {
private volatile boolean flag = false;
public Thread2(){
Thread t2 = new Thread(){
public void run(){
System.out.println("t2 started :::::::::::::: ");
Thread2 t3 = new Thread2();
try {
t3.start2ndThread();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
};
t2.start();
t2.interrupt();
}
public void start2ndThread() throws InterruptedException{
Runnable r3 = new Runnable() {
@Override
public void run() {
System.out.println("Thread t3 started >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
Thread t3 = new Thread(r3);
t3.start();
t3.join(2000);
terminate();
}
public void terminate(){
flag = true;
}
public static void main(String[] args) {
Thread2 thread2 = new Thread2();
}
}
Короткий ответ, нет. Да. Но вам нужно будет проверить завершение в вашем 't3'' Thread' (и потому, что 'flag' не * эффективно *' final'), вы не можете сделать это напрямую. Вы можете использовать другой механизм 'flag' (возможно,' Singleton' или 'AtomicInteger'), но это не так прямолинейно, как вы, вероятно, надеялись. –
Что вы пытаетесь достичь здесь. Если у вас есть реальный прецедент для потоков, рассмотрите возможность использования ExecutorService https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html для создания потоков и завершения работы исполнителя. – User2709
Поскольку вы изначально отметили [java-ee], хотя вы использовали обычный класс Java-приложений с методом 'main()', я хотел бы предупредительно указать вам на то, что ручное создание и нереста 'Thread's is ** ужасно плохая идея ** в приложении Java EE. Это тогда пища для размышлений: http://stackoverflow.com/q/6149919 – BalusC