写了个程序,要用到很多线程,我定义了一个线程数组,程序如下:
MyThreadClass threadclass=new MyThreadClass();
Thread [] myth=new Thread[20];
int num=0;
while(true){
if(num=20){
num=0;
}
myth[num]=new Thread(threadclass);
num++;
}
请问,在我的程序执行一遍循环,也就是创建了20个线程后,在执行第二遍的时候,是不是java虚拟机会自动把没用的线程回收?如果不能回收的话,我该怎么样手工将其销毁?请大家帮忙!!
安道理java虚拟机是可以自动回收的!
好像没有什么特别的方法!
表示关注!!!
不明白,只要线程从run()里退出,线程就销毁了
如果线程还没有运行完,就象从外部停止它,否则线程是不会被回收的
while(true){
if(num=20){
num=0;
}
myth[num]=new Thread(threadclass);
num++;
}
你的这个循环可以退出吗???不能退出的话就算只一个也不能销毁。
你这样用它会覆盖上次的一个线程对象,原来的也就不用你管了,你想再调用原来的线程也是不可能的。
你试过了的吗???为什么说不行???
如果你的循环是在run()方法里,就不用退出了。
不过我还是不懂你这段代码的意思,构建20个MyThreadClass干嘛???你又没有让这些线程运行。
你应该把你想要作的说清楚。
加全局标志位,就可以实现退出线程了
本来java虚拟机的自动回收功能都是不定时的进行的,要强制执行的话,就调用System类中的静态方法gc(),但这样不能保证回收对象内存。
public void run(){
while(sss)//sss=false时会发生什么事情
{
...
}
}
让线程退出的办法,我感觉最好的就是下面这样
public MyThread extends Thread
{
private boolean running = true;
public void run(){
while(running){
//这里放入线程的执行处理
}
}
public void stopThread(){//设置一个函数stopThread,用来停止线程
running = false;//将running=false,程序的run()中的while循环会退出,线程死亡
}
}
我也不明白你的代码,如果线程运行完后,会自动销毁,使用join()就可等待线程的结束,如果采用外来的停止线程就需要根楼上的一样去操作,使用全局变量。
friendyou(anew)用一下你的大脑