to hccpro(hcc) : Thread t = this; t = null; 确实没用也,因为垃圾回收只有当对象没有被引用时才起作用。 现在我们看看你的过程: //执行这段前 THIS 对象有this 1个引用 Thread t = this; //这时,有2个变量引用对象 ,t 和this t = null; // 这时还剩有一个变量引用对象,就是this所以这段程序不起任何作用一点拙见
其实core in java2里面讲得很清楚,要安全地终止一个线程,可以用一个变量来便是这个线程是否有终止要求,并让这个线程定期地测试这个变量。 public class MyThread extends Thread { public void run() { while (!stopRequested && more work to do) { do more work …… } } public void requestStop() { stopRequested = true; } private boolean stopRequested; }
在线程中设置条件变量的方法好,在其它工具中(vc,bcb)我一般都是这么做的。
上面各位仁兄已经说得比较清楚了...就是在线程的run()中增加判断条件,不符合条件就退出,我个人认为,这是一种最好最安全的方法.. 不过在涉及多线程同时操作时,有时需要考虑同步问题.. 多个线程同时kill同一个线程时: void kill() { syncronize(this) { if (bFirstEnter) //if the method is called first { bFirstEnter = false; bStop = true; notify(); // notify the other thread.wait() return } else { wait(); // wait util notified bStop = true; notify(); } } } 这是申明一个对象同步方法,也就是说,同时只能有一个线程进入此方法.
Thread t = this;
t = null
不行。
t = null;这是为了提醒垃圾收集器回收资源!
我用线程实现过并行算法,很喜欢研究多线程。多交流!!
线程的软件我也编过很多。
我连stop()都没用过,我干嘛用stop()?
Thread t = this;
t = null;
确实没用也,因为垃圾回收只有当对象没有被引用时才起作用。
现在我们看看你的过程:
//执行这段前 THIS 对象有this 1个引用
Thread t = this;
//这时,有2个变量引用对象 ,t 和this
t = null;
// 这时还剩有一个变量引用对象,就是this所以这段程序不起任何作用一点拙见
你重写起什么名字不行,偏要还叫stop()?什么意思嘛。
在run()里用while或if判断就行了嘛
think in java 和 core java 都这样做的
public void run(){
while(isstop){
.....
}
}
......public void stop(){
isstop=false;
}我觉得这样控制一个线程是比较好的,到目前为止我都没有遇见过什么问题。
不太明白你的意思,你的意思好象是说在要将线程直接杀掉吗?
其实,线程好多都是用来反复的做某件事的,因此通常在"run()"方法中加入这样的一句:while(true){},你只要将这句改为:while(goOn){}即可,goOn是你自己定义的一个boolean变量。当你想要结束这个线程,只要将goOn赋值为false,循环就会退出,线程自然结束了。试试看,很灵的。
public void kill()
{
\\在这可以把线程的判断标志can_do附值为假
can_do=false;
}
但是这就涉及到线程同步的问题,具体的我就不太好说了。
因此如没有特别要求,直接退出进程体,线程就自动停止了;然后java的垃圾外理器会在适当的时候清理它;所以你只需要在代码结尾处加一条return;语句就行了!
public class MyThread extends Thread
{ public void run()
{ while (!stopRequested && more work to do)
{ do more work
……
}
}
public void requestStop()
{ stopRequested = true;
}
private boolean stopRequested;
}
不过在涉及多线程同时操作时,有时需要考虑同步问题..
多个线程同时kill同一个线程时:
void kill()
{
syncronize(this)
{
if (bFirstEnter) //if the method is called first
{
bFirstEnter = false;
bStop = true;
notify(); // notify the other thread.wait() return
}
else
{
wait(); // wait util notified
bStop = true;
notify();
}
}
}
这是申明一个对象同步方法,也就是说,同时只能有一个线程进入此方法.