我写了一个程序,一次可以运行多个任务,并且这些任务是多线程的,当线程启动之后,我在程序的另外一个地方,通过下面的程序关闭线程
  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();//把与该任务有关的线程全部关掉
  }
        
 }  
}但是无法关闭,请求大家帮助~!

解决方案 »

  1.   

    不要想当然地认为主线程有控制其他线程的权力!不管主线程还是子线程,都是一样的级别的,不存在一个控制另一个的生命周期,interrupt 只是跟子线程中你能否中断?如果子线程不肯中断,那就中断不了!
      

  2.   

    另外 Thread#stop 方法在 JDK 1.1 就被废弃,这是由于类库设计人员的考虑欠妥造成的,强行执行会造成线程状态混乱,甚至死锁!详见 API 文档。Thread 中那 5 个被废弃的方法,是 JDK 中永远的痛。
      

  3.   

    嗯。
    线程自己应该有自己的退出机制,比方说周期性监测一个flag变量,若状态合适则自己结束运行。
    这样,想要结束某线程,设置该flag变量就行了。
      

  4.   

    我赞成果子的想法。
    系统当中,线程的地位都是平等的。
    楼主想用一个线程去终止另一个线程的想法,不是不能实现,而是要考虑线程方面的一些问题。
    比如:待终止的线程正在处理什么任务?这些任务是否可以强行终止?
    实际一点的,比如,我可以编写一个转账功能的线程,将无数个账户的欠款转移到另一批账户中去,
    当线程为完成一个账目的转账时强行终止,就会造成坏账,
    因为它可能刚把A的钱做减法处理还未来得及对B做加法处理。
    还比如,网络通信当中,线程创建了好多Socket,当线程正在使用某个Socket进行通信时,
    被强行终止,可能造成通信双方的信息不同步,以及,由于线程没有正常结束,有些Socket资源,
    可能无法被系统回收(当然只是可能)。interrupt只是试图中断线程,而非强行终止,如果线程不愿意被中断,它仍然可以继续执行。
    stop方法,已经被遗弃,缺点多多,API已经不建议使用,倒是可以强制终止线程。当然,我现在遇到多任务并发处理的情况时,都采用线程池技术。
    将线程要处理的事情,形成任务对象,统一提交给线程池来处理。