怎样才能中止一个Thread对象并将其及时释放?
刚刚开始学习多线程机制,很多地方不了解.
程序中有类似如下代码:
class A implements Runnable {
... ...
private Thread threadA;
public A() {
... ...
threadA=new Thread(this);
}
public void run() {
... ...
}
public void start() {threadA.start();}
public void reset() {
... ...
threadA=null;
threadA=new Thread(this);
}
}
程序中需要有一个reset()方法以使A对象能复原成初始的状态,使得当它再start()时能表现出与刚构造完再start()一样的行为. 我以为像上面那样,将threadA原先指向的线程对象置空再指向一个新线程对象就可以了,但调试时才发现这样做其实不能销毁原先的线程,它与新的线程同时存在并继续执行,造成了程序逻辑上的错误.
那么怎样才能真正地在reset()方法中停止原先的线程,并且将原先的线程对象释放呢?
------解决方案--------------------线程一般启动,就不要去控制它停止,一种比较好的方式是:让线程完成自己的任务!
按照你的需求,你可以创建一个线程池来实现,可以使用jdk1.5中的java。util。concurrent。
------解决方案--------------------看门狗,停线程!
------解决方案--------------------我有个重启线程的程序
MAIN启动多个线程时,把MAIN自身的引用传给线程,线程出错时TRY/CATCH捕捉到错误,调用MAIN的方法来重新启动一个新线程,老线程直接RETURN弹出
例:
master.java
public static void main(String[] args){
master ms = new master();
Thread th1 = new TH_1(ms);
Thread th2 = new TH_2(ms);
th1.start();
th2.start();
}
public void restartThread(String threadName){
if(threadName.equals( "thread1 ")
Thread th1 = new TH_1(this);
th1.start();
if(threadName.equals( "thread2 ")
Thread th2 = new TH_2(this);
th2.start();
}
TH_1.java
private master ms;
public TH_1(master ms){
this.ms = ms;
}
public void run(){
while(true){
try{
//todo
}catch(Exception ex){
//on error
ms.restartThread( "thread1 ");
return;
}
}
}
TH_2与TH_1类似
简单示意就是这样