当前位置: 代码迷 >> J2SE >> java 线程解决思路
  详细解决方案

java 线程解决思路

热度:9458   发布时间:2013-02-25 00:00:00.0
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() ...
  相关解决方案