首页 新闻 赞助 找找看

定时器Timer如何强制停止正在执行的线程?

0
悬赏园豆:50 [已解决问题] 解决于 2020-01-14 10:32

timer = new Timer();
TimerTask timerTask=new TimerTask() {
public void run() {
if (flag == 0) {
timer.cancel();
}

                ltips.setText("定时任务执行中..");
                String originFile=originfile.getText();
                String checkAddress=checkaddress.getText();
                String preservAddress=preservaddress.getText();
                CscsTool cst=new  CscsTool();
                String result=cst.readAndsticky(originFile, checkAddress, 
                                    preservAddress);

                ltips.setText(result);
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                ltips.setText("等待执行任务中..");
            }
        };
        timer.scheduleAtFixedRate(timerTask, time, PERIOD_DAY);
青棠的主页 青棠 | 初学一级 | 园豆:44
提问于:2020-01-13 11:38
< >
分享
最佳答案
0

写个flag变量,定时器Timer,每次方法执行之前,判断下这个flag,

收获园豆:50
大志若愚 | 老鸟四级 |园豆:2138 | 2020-01-13 19:48

您说的这个方法我这里有,
但是如果定时器正在执行,
此时点击关闭,
但它的线程还是在运行,
无法立即结束,
只有等线程运行完成后,
才会结束。

青棠 | 园豆:44 (初学一级) | 2020-01-14 08:45

@青棠: 那试着使用后台线程,主线程退出,后台线程会强制退出

大志若愚 | 园豆:2138 (老鸟四级) | 2020-01-14 09:08

@大志若愚: 怎么找到这个程序的主线程,用system.exit会使整个程序退出。

青棠 | 园豆:44 (初学一级) | 2020-01-14 09:13

@青棠: 理论上是你点击关闭的那个程序,关闭的就是主线程

大志若愚 | 园豆:2138 (老鸟四级) | 2020-01-14 09:17

@大志若愚: 但是我不想关闭程序,所以就比较难搞。

青棠 | 园豆:44 (初学一级) | 2020-01-14 09:22

@青棠: 启动线程的时候,拿到线程ID,想杀死的时候,杀死指定线程ID即可
参考:https://blog.csdn.net/ywq1016243402/article/details/86669574

大志若愚 | 园豆:2138 (老鸟四级) | 2020-01-14 09:32

@大志若愚: 嗯嗯,
好的,
我试一试。
谢谢您!

青棠 | 园豆:44 (初学一级) | 2020-01-14 09:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册