- Java code
trButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { timer.schedule(new timertask(loginFrame), 0, 1000*30*loginFrame.getti());//时间间隔30秒 } });
- Java code
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之外只有一个这样的线程正在执行。
------解决方案--------------------------------------------------------
我的想法就是把他放到一个池子里面用队列来处理 。
------解决方案--------------------------------------------------------
新创建的一个线程时,把已创建的线程终止。
可以在线程类中设一个标志位变量,新创建线程时,将变量置0,线程终止;
然后再创建线程,将标志位置1
参考网上同学们的例子
http://blog.csdn.net/DoDChung/article/details/1832444
------解决方案--------------------------------------------------------
测试类
- Java code
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(); } } }}
------解决方案--------------------------------------------------------
关闭旧线程后,最好判断下旧线程是否已结束工作状态来决定创建新线程的时机
Thread::isAlive() Thread::getState() ...