当前位置: 技术问答>java相关
重金悬赏,java多线程高手请进
来源: 互联网 发布时间:2015-06-17
本文导语: 我使用的是jdk1.4。自己创建了一个继承了Thread的类,该线程启动正常,运行正常,只是不知道应该怎样结束线程的运行。以前版本中的.stop()方法在JDK1.4中已经作废,而1.4提供的.destroy()方法又没有实现。请问我应该采...
我使用的是jdk1.4。自己创建了一个继承了Thread的类,该线程启动正常,运行正常,只是不知道应该怎样结束线程的运行。以前版本中的.stop()方法在JDK1.4中已经作废,而1.4提供的.destroy()方法又没有实现。请问我应该采用怎样的方式结束这个线程的运行。请高手指教!
|
to hccpro(hcc) :
Thread t = this;
t = null;
确实没用也,因为垃圾回收只有当对象没有被引用时才起作用。
现在我们看看你的过程:
//执行这段前 THIS 对象有this 1个引用
Thread t = this;
//这时,有2个变量引用对象 ,t 和this
t = null;
// 这时还剩有一个变量引用对象,就是this
所以这段程序不起任何作用
一点拙见
Thread t = this;
t = null;
确实没用也,因为垃圾回收只有当对象没有被引用时才起作用。
现在我们看看你的过程:
//执行这段前 THIS 对象有this 1个引用
Thread t = this;
//这时,有2个变量引用对象 ,t 和this
t = null;
// 这时还剩有一个变量引用对象,就是this
所以这段程序不起任何作用
一点拙见
|
设个标志
在run()里用while或if判断就行了嘛
think in java 和 core java 都这样做的
在run()里用while或if判断就行了嘛
think in java 和 core java 都这样做的
|
楼上几位说的都很有道理,在RUN方法的循环中用一个标记,当退出循环,线程自然就停止了。如:
.....
public void run(){
while(isstop){
.....
}
}
......
public void stop(){
isstop=false;
}
我觉得这样控制一个线程是比较好的,到目前为止我都没有遇见过什么问题。
.....
public void run(){
while(isstop){
.....
}
}
......
public void stop(){
isstop=false;
}
我觉得这样控制一个线程是比较好的,到目前为止我都没有遇见过什么问题。
|
这些都不是很好的办法,当你用".stop()"方法时,系统会给出一个警告的。
其实,线程好多都是用来反复的做某件事的,因此通常在"run()"方法中加入这样的一句:while(true){},你只要将这句改为:while(goOn){}即可,goOn是你自己定义的一个boolean变量。当你想要结束这个线程,只要将goOn赋值为false,循环就会退出,线程自然结束了。试试看,很灵的。
其实,线程好多都是用来反复的做某件事的,因此通常在"run()"方法中加入这样的一句:while(true){},你只要将这句改为:while(goOn){}即可,goOn是你自己定义的一个boolean变量。当你想要结束这个线程,只要将goOn赋值为false,循环就会退出,线程自然结束了。试试看,很灵的。
|
我认为,当run()方法结束的时候,线程就结束了,我在学习think in java的时候就是这样认为的,而且我在实际的开发中也是这样使用的,所以可以使用两种方法来结束线程,一个return()返回,以及while(can_do){can_do=false}都可以。