java多線程實現定時器任務

volatile是一個弱同步機制關鍵字,只能實現同步機制中的可見功能,不能實現互斥訪問。用在變量的聲明上時,表示多個線程獲取此變量時,都是最新的數據(變量會自動更新最新數據)。
synchronized 是一個內置鎖,也就是java內部加鎖機制。用在方法上時,每一個線程進入的時候,它會得到方法所在的對象的鎖,離開方法後釋放對象鎖。
自定義定時任務
任務管理類
package com.effectJava.Chapter3;

import java.util.concurrent.TimeUnit;

public class ManagerTask {

    private  static  boolean isManagerTaskEnd;

    public synchronized  static void setIsManagerTaskEnd(boolean flage) {
       isManagerTaskEnd = flage;
    }

    public synchronized static boolean isIsManagerTaskEnd() {
        return isManagerTaskEnd;
    }

//    private static mytimeTask timetask = new mytimeTask();

    public static void main(String... args) throws Exception {
//        開啓任務線程
        new Thread(){
            @Override
            public void run() {
                while (true){
                    if(isIsManagerTaskEnd()){//沒開啓任務線程
                        setIsManagerTaskEnd(false);
                        new mytimeTask().start();
                    }
                }

            }
        }.start();
        //開啓timetask任務
        setIsManagerTaskEnd(true);


        TimeUnit.SECONDS.sleep(1);

        //關閉
//        setIsManagerTaskEnd(false);
        //關閉timetask
        mytimeTask.setFlagesTrue(true);

        TimeUnit.SECONDS.sleep(2);

        mytimeTask.setFlagesTrue(false);
        setIsManagerTaskEnd(true);

    }


}

任務處理類java

package com.effectJava.Chapter3;

public class mytimeTask  extends   Thread{

    private  volatile  static boolean flages ;

    private  static  int count;
    //設置可見性
    public static   boolean isFlages() {
        return flages;
    }

    public  static   void setFlagesTrue(boolean flage) {
        flages = flage;
    }

    @Override
    public void run() {
        while (!isFlages()) {
            System.out.println("執行任務");
            //執行任務代碼
        }
    }


    public  synchronized static  int reCount() {
        return count++;
    }

    public  synchronized static  int getCount() {
        return count;
    }
}
相關文章
相關標籤/搜索