【发布时间】:2014-12-09 06:14:48
【问题描述】:
请帮我解决这个问题 主线程/父线程将触发子线程。如果我们要停止父/主线程,它也必须停止所有子/子线程
我想用中断来做,但做不到 请帮我写代码
以及如何确保所有子线程都已停止?还有什么方法可以做到这一点
提前致谢!
我正在尝试做这样的事情:
公共类 ThreadTest1 扩展 Thread{ private static final Logger LOGGER = Logger.getLogger("mylogger");
public void run(){
for(int i=1;i<=5;i++){
try{
if (!Thread.currentThread().isInterrupted()) {
LOGGER.log(Level.SEVERE,"Sleeping...");
Thread.sleep(1000);
LOGGER.log(Level.SEVERE,"Processing");
System.out.println(Thread.currentThread().getId()+"Thread id: "+i);
}
else{
throw new InterruptedException();
}
}catch(InterruptedException e){
System.out.println(e);
LOGGER.log(Level.SEVERE,"Exception", e);
Thread.currentThread().interrupt();
}
}
}
public static void main(String args[]){
ThreadTest1 t1=new ThreadTest1();
ThreadTest1 t2=new ThreadTest1();
ThreadTest1 t3=new ThreadTest1();
System.out.println(t1.getId());
System.out.println(t2.getId());
System.out.println(t3.getId());
t1.start();
t2.start();
t3.start();
System.out.println("Do you want to kill all processes: Press any key to continue");
int s=0;
try {
s = System.in.read();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(s!=0){
t1.interrupt();
t2.interrupt();
t3.interrupt();
}
System.out.println(t1.isAlive());
}
}
【问题讨论】:
-
Please help me out with the code哪个代码?你应该把你的代码放在这里,让其他人知道你在做什么。 -
抱歉忘记添加之前/现在添加代码
-
也许
ThreadGroup会有所帮助?如果将所有子线程放在同一个ThreadGroup中,则可以将它们全部中断。子线程仍然需要定期检查来配合。 -
谢谢@ajb 我会尝试用 Theadgroups 来做。即使我也不确定它是否可以与 Threadgroup 一起使用
-
好的,感谢您发布代码...有什么症状?代码看起来应该杀死线程,但您在检查
t1.isAlive之前等待的时间不够长。中断将需要一些时间来处理。另外,您确定它可以识别输入吗?在许多系统上,如果您只是“按一个键”,输入将不会进入程序,直到您按 ENTER 或 RETURN。
标签: java eclipse multithreading exception