我写了一个程序,一次可以运行多个任务,并且这些任务是多线程的,当线程启动之后,我在程序的另外一个地方,通过下面的程序关闭线程
ThreadGroup group = Thread.currentThread().getThreadGroup();
ThreadGroup parent = null;
while ( (parent = group.getParent()) != null ) {
group = parent;
}
Thread[] threads = new Thread[group.activeCount()];
group.enumerate(threads);
for (int i=0; i < threads.length; ++i) {
if (threads[i] != null && threads[i].isAlive()) {
//set.add(threads[i].getThreadGroup().getName()+","+threads[i].getName()+","+threads[i].getPriority());
String currentName=threads[i].getName();
if(currentName.startsWith(task.getTaskId()+"")){
threads[i].interrupt();//把与该任务有关的线程全部关掉
}
}
}但是无法关闭,请求大家帮助~!
ThreadGroup group = Thread.currentThread().getThreadGroup();
ThreadGroup parent = null;
while ( (parent = group.getParent()) != null ) {
group = parent;
}
Thread[] threads = new Thread[group.activeCount()];
group.enumerate(threads);
for (int i=0; i < threads.length; ++i) {
if (threads[i] != null && threads[i].isAlive()) {
//set.add(threads[i].getThreadGroup().getName()+","+threads[i].getName()+","+threads[i].getPriority());
String currentName=threads[i].getName();
if(currentName.startsWith(task.getTaskId()+"")){
threads[i].interrupt();//把与该任务有关的线程全部关掉
}
}
}但是无法关闭,请求大家帮助~!
线程自己应该有自己的退出机制,比方说周期性监测一个flag变量,若状态合适则自己结束运行。
这样,想要结束某线程,设置该flag变量就行了。
系统当中,线程的地位都是平等的。
楼主想用一个线程去终止另一个线程的想法,不是不能实现,而是要考虑线程方面的一些问题。
比如:待终止的线程正在处理什么任务?这些任务是否可以强行终止?
实际一点的,比如,我可以编写一个转账功能的线程,将无数个账户的欠款转移到另一批账户中去,
当线程为完成一个账目的转账时强行终止,就会造成坏账,
因为它可能刚把A的钱做减法处理还未来得及对B做加法处理。
还比如,网络通信当中,线程创建了好多Socket,当线程正在使用某个Socket进行通信时,
被强行终止,可能造成通信双方的信息不同步,以及,由于线程没有正常结束,有些Socket资源,
可能无法被系统回收(当然只是可能)。interrupt只是试图中断线程,而非强行终止,如果线程不愿意被中断,它仍然可以继续执行。
stop方法,已经被遗弃,缺点多多,API已经不建议使用,倒是可以强制终止线程。当然,我现在遇到多任务并发处理的情况时,都采用线程池技术。
将线程要处理的事情,形成任务对象,统一提交给线程池来处理。