黑马程序员技术交流社区
标题:
多线程问题
[打印本页]
作者:
成都校区
时间:
2012-3-19 16:08
标题:
多线程问题
在A类中开启一条子线程,然后销毁A,子线程还在跑,因为主线程还存在,怎么单独结束子线程……?
作者:
张润政
时间:
2012-3-19 17:56
兄弟啊,我觉得也许你还没有理解线程的含义吧。以下是我的一点浅见。
首先我们说下线程的产生,当我们需要在程序的运行中加入其他的线程,来提高程序的效率,完成特殊其他的任务的时候,我们就采用集成Thread类或者实现Runnable接口,都要覆盖run方法来实现。
我们为什么要实现run方法呢?其实它就是一个自定义线程的入口,所以run方法是除了主线程之外其他线程想要执行,就必须要走这个入口。
我们在A类中开启了一个子线程,然后销毁A??A怎么可能被销毁呢?你在A类中开启了这个线程,A类自加载进内存,产生这个线程对象,或者说这个类中还要还有成员存活,它就不能消失啊。何况我们开启的是一个线程。
并且我也不是很理解你这个问题的初衷。但是还是打个比喻吧
比如你的A类中就有main方法,并且它开启了其他线程。其他线程开始运行了,main线程还在往下执行,一直到main线程执行完了,消亡了,也许你开启的另外一个线程还没有结束,并不是子线程活着,主线程就一定得活着。
至于说结束单独的线程,我们说结束线程只能有一个方法,那就是run方法结束了,这个线程才会真正的消亡了。如果我们的线程进入run方法执行代码的时候变成了冻结状态,线程不能正常结束,那么我就就得帮帮这个线程。
在java中Thread类提供该方法interrupt();可是使这个线程强行的回到run方法中上,直到run方法结束,这个线程才会消亡。
作者:
尹震
时间:
2012-3-19 20:58
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);
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2