-
1 # 脫非入歐8888偷渡成功
-
2 # 千鋒長沙
建立定時任務時,如果我們不主動去取消定時任務,我們需要的任務內容執行完畢,但定時任務不會關閉。
啟動定時任務時,相當於啟動一個分執行緒,
下面寫了兩種:
一是透過定義引數,建立物件時,將定時器物件傳入構造方法,從而確保我們關閉的是我們主動開啟的那個任務
二是直接對當前執行緒進行中斷、停止、銷燬,後兩種已經不推薦使用已經過時了
package timer;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class Demo
{
public static void main(String[] args) throws InterruptedException{
works();
}
/**
* 該方法驗證的是有參構造方法的Works
* 使用定時器取消任務
* 定時器物件如何被繼承TimerTask的類獲取
* @throws InterruptedException
*/
public static void works() throws InterruptedException {
Timer t1 = new Timer();
Works w = new Works(t1);
t1.schedule(w, 6000);
for(int i=5;i>0;i--)
{
Thread.sleep(1000);
System.out.println("任務還有"+i+"s"+"開啟"+" "+"主執行緒執行緒名為:"+Thread.currentThread().getName());
}
while(true)
{
Date date=new Date();
SimpleDateFormat da=new SimpleDateFormat("HH:mm:ss");
Thread.sleep(1000);
System.out.println(da.format(date)+" "+Thread.currentThread().getName());
}
}
}
class Works extends TimerTask{
public Timer t;
public String TName;
/**
* 構造方法,獲取需要暫停的任務
* @param t1
*/
public Works(Timer t1) {
// TODO Auto-generated constructor stub
this.t = t1;
}
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("定時任務為:該吃飯了!");
System.out.println("定時任務即將關閉!");
can1();
//can2();
}
public void can1(){
// for(int i=3;i>0;i--)
// {
// try {
// Thread.sleep(1000);
//
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// TName = Thread.currentThread().getName();
// System.out.println("倒計時: "+i+"s"+" "+TName);
// }
// t.cancel();
// System.out.println("任務已關閉");
int m=10;
while(m>0)
{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
TName = Thread.currentThread().getName();
System.out.println("定時任務仍在繼續: "+m+"s"+" "+"定時任務執行緒名:"+TName);
m--;
}
t.cancel();
System.out.println("任務已關閉");
}
public void can2() {
for(int i=3;i>0;i--)
{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("倒計時: "+i+"s");
}
//Thread.currentThread().stop();
//Thread.currentThread().destroy();
Thread.currentThread().interrupt();
System.out.println("任務已關閉");
}
}
-
3 # 靈夢國度
透過任務執行緒池操作
https://blog.csdn.net/weixin_44647371/article/details/123600081?utm_source=app&app_version=4.15.0&code=app_1562916241&uLinkId=usr1mkqgl919blen
回覆列表
中斷?可能是想說暫停吧。簡單寫了個栗子,定時任務是每一分鐘執行一次,需要暫停時就呼叫pauseTask,需要繼續就呼叫continueTask,需要注意的是do sth上面的while迴圈體內容:當暫停時並不是立刻停止,而是等到下一次定時任務開始執行時暫停,直到被呼叫continueTask才立即恢復執行。