日期:2014-05-20  浏览次数:20653 次

java 线程
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() ...