如何在JAVA中让一个线程死亡或结束
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在JAVA中让一个线程死亡或结束相关的知识,希望对你有一定的参考价值。
当线程执行完毕或被其它线程杀死,线程就进入死亡状态,这时线程不可能再进入就绪状态等待执行。线程进入死亡状态的方法有两种:
1、自然终止:正常运行run()方法后终止;
2、异常终止:调用stop()方法让一个线程终止运行。
如下代码:
public class ThreadDemo implements Runnable
public void run()
当run方法执行结束,即线程死亡(结束)。 参考技术A /** * JAVA里面如何使用一个线程死亡或结束. * */ public class T public static void main(String args) // 启动线程 MyThread thread = new MyThread(); new Thread(thread).start(); // 你的其它的工作,此时线程在运行中 // 你不想让线程干活了,停掉它 // 注意,这只是一个标志,具体线程何时停,并不能精确控制 thread.allDone = true; class MyThread implements Runnable boolean volatile allDone = false; public void run() // 每次循环都检测标志 // 如果设置停止标志时已经在循环里 // 则最长需要等待一个循环的时间才能终止 while (!allDone) // 循环里的工作 修正,增加了 volatile 关键字,避免多个CPU出问题。本回答被提问者采纳
即使在父线程死亡或终止之后,子线程如何仍然执行?
这是我的两个班级:
public class Firstclass {
public static void main(String args[]) throws InterruptedException {
System.out.println("Main start....");
Secondclass t1 = new Secondclass();
t1.setName("First Thread");
Secondclass t2 = new Secondclass();
t2.setName("Second Thread");
t1.start();
t2.start();
System.out.println("Main close...");
}
}
和
public class Secondclass extends Thread {
@Override
public void run() {
try {
loop();
} catch(Exception e) {
System.out.println("exception is" + e);
}
}
public void loop() throws InterruptedException {
for(int i = 0; i <= 10; i++) {
Thread t = Thread.currentThread();
String threadname = t.getName();
if(threadname.equals("First Thread")) {
Thread.sleep(1000);
} else {
Thread.sleep(1500);
}
System.out.println("i==" + i);
}
}
}
现在,当我运行Firstclass
时,输出为:
Main start....
Main close...
i==0
i==0
i==1
i==1
i==2
i==3
i==2
i==4
i==3
i==5
i==6
i==4
i==7
i==5
i==8
i==9
i==6
i==10
i==7
i==8
i==9
i==10
我的问题是:让我们考虑主要方法是由JVM中的线程'T'执行,而t1和t2显然是父线程T的子线程,所以当作为主要方法的T线程死亡时,T1和T2如何仍然执行并给我们输出。因为如果父线程死亡或终止,那么子线程也应该死亡或终止。
答案
线程之间没有父子关系的概念。一旦两个线程运行,它们基本上是同行。主线程可以在其他线程仍在运行时退出。
Java没有“子”线程的真正概念。当你启动一个线程时,它从“父”继承守护进程和优先级,但这是父/子关系的结束。
另一答案
Java不知道子线程的概念。你的三个线程被平等对待。您的想法接下来是创建守护程序线程,这些线程在最后一个java非守护程序线程停止时终止。
您发布的论文是关于一个名为ThreadMentor的学习系统。但是这个系统的行为与Java不同,这与Java无关。
这可能是Javas线程模型的一个良好开端:
http://docs.oracle.com/javase/tutorial/essential/concurrency/
另一答案
在这个应用程序中,主线程首先启动并运行,即使你已经启动了t1和t2它们进入就绪状态但是它们没有运行,当前运行的线程是主线程。一旦主线程完成其所有语句,它就不会立即死亡,它会一直等到它完成子线程执行。正如在上述情况中发生的那样。
以上是关于如何在JAVA中让一个线程死亡或结束的主要内容,如果未能解决你的问题,请参考以下文章