A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 成都校区 金牌黑马   /  2012-3-19 16:08  /  1797 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在A类中开启一条子线程,然后销毁A,子线程还在跑,因为主线程还存在,怎么单独结束子线程……?

2 个回复

倒序浏览
兄弟啊,我觉得也许你还没有理解线程的含义吧。以下是我的一点浅见。
首先我们说下线程的产生,当我们需要在程序的运行中加入其他的线程,来提高程序的效率,完成特殊其他的任务的时候,我们就采用集成Thread类或者实现Runnable接口,都要覆盖run方法来实现。
我们为什么要实现run方法呢?其实它就是一个自定义线程的入口,所以run方法是除了主线程之外其他线程想要执行,就必须要走这个入口。
我们在A类中开启了一个子线程,然后销毁A??A怎么可能被销毁呢?你在A类中开启了这个线程,A类自加载进内存,产生这个线程对象,或者说这个类中还要还有成员存活,它就不能消失啊。何况我们开启的是一个线程。
并且我也不是很理解你这个问题的初衷。但是还是打个比喻吧
比如你的A类中就有main方法,并且它开启了其他线程。其他线程开始运行了,main线程还在往下执行,一直到main线程执行完了,消亡了,也许你开启的另外一个线程还没有结束,并不是子线程活着,主线程就一定得活着。
至于说结束单独的线程,我们说结束线程只能有一个方法,那就是run方法结束了,这个线程才会真正的消亡了。如果我们的线程进入run方法执行代码的时候变成了冻结状态,线程不能正常结束,那么我就就得帮帮这个线程。
在java中Thread类提供该方法interrupt();可是使这个线程强行的回到run方法中上,直到run方法结束,这个线程才会消亡。
回复 使用道具 举报
public class ThreadExer {
  //主线程main
        public static void main(String[] args) {  
   
                Counter counter = new Counter();   
                        //使用线程首先实例化,调用的是构造函数Thread(Runnable targer)。
                Thread thread = new Thread(counter);  
                thread.start();            //线程启动,执行run()方法。
                for (int i = 0; i < 100; i++) {
                        System.out.println("主线程数:" + i);
                }
        }
}
//执行run()方法有两种,一、实现Runnable接口  二、继承Thread类

   public class SubClass implements Runnable {   

   //子线程
        public void run() {              //run()方法是线程体,准备要实现的功能。
                for (int i = 0; i < 100; i++) {
                        System.out.println("子线程数:" + i);
                }
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马