首頁>Club>
9
回覆列表
  • 1 # 脫非入歐8888偷渡成功

    中斷?可能是想說暫停吧。簡單寫了個栗子,定時任務是每一分鐘執行一次,需要暫停時就呼叫pauseTask,需要繼續就呼叫continueTask,需要注意的是do sth上面的while迴圈體內容:當暫停時並不是立刻停止,而是等到下一次定時任務開始執行時暫停,直到被呼叫continueTask才立即恢復執行。

  • 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

  • 中秋節和大豐收的關聯?
  • 腳踏車輻條的安裝法?