trButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event) {
timer.schedule(new timertask(loginFrame), 0, 1000*30*loginFrame.getti());//时间间隔30秒
}
});
public class timertask extends TimerTask{

private LoginFrame loginFrame;

public timertask(LoginFrame loginFrame) {
// TODO Auto-generated constructor stub
this.loginFrame = loginFrame;
} public void run(){

GetcThread getcthread = new GetcThread(loginFrame);
     Thread t = new Thread(getcthread);
     t.start();
}
}我通过点击按钮产生一个线程,我现想下一次点击按钮的时候,结束上一个线程,如何实现?大意就是每次只希望有一个除了main之外只有一个这样的线程正在执行。

解决方案 »

  1.   

    新创建的一个线程时,把已创建的线程终止。可以在线程类中设一个标志位变量,新创建线程时,将变量置0,线程终止;
    然后再创建线程,将标志位置1参考网上同学们的例子
    http://blog.csdn.net/DoDChung/article/details/1832444
      

  2.   

    测试类public class Test { public static void main(String[] args) {
    try {
    ThreadTest tt = new ThreadTest();
    ThreadTest.flag = true;
    new Thread(tt).start();
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    } ThreadTest.flag = false;

    try {
    Thread.sleep(1000);
    ThreadTest tt1 = new ThreadTest();
    ThreadTest.flag = true;
    new Thread(tt1).start();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }}class ThreadTest implements Runnable{

    public static boolean flag = false; public void run(){
    while(flag){
    try {
    Thread.sleep(100);
    System.out.println(Thread.currentThread() + "is running.");
    } catch (InterruptedException e) {
    e.printStackTrace();
    }

    }
    }
    }
      

  3.   

    关闭旧线程后,最好判断下旧线程是否已结束工作状态来决定创建新线程的时机
    Thread::isAlive()  Thread::getState() ...