線程池管理筆記-動態取消定時週期性線程任務

我這裏只是記錄一下,所以我不會進行詳細解讀。

線程池管理工具

/**
 * 線程池管理類
 *
 * @author panyingdao
 * @date 2018/6/12/012.
 */
public class ExecutorServiceManager {

    private static ExecutorServiceManager executorServiceManager;
    private ScheduledExecutorService scheduledExecutorService;

    /**
     *  線程池參數初始化
     */
    private ExecutorServiceManager() {
        int numberOfCores = Runtime.getRuntime().availableProcessors();
        Plog.e("numberOfCores= " + numberOfCores);
        scheduledExecutorService = new ScheduledThreadPoolExecutor(numberOfCores * 6,
                new BasicThreadFactory.Builder().namingPattern("example-schedule-pool-%d").daemon(true).build());
    }

    /**
     *  單例
     */
    public static ExecutorServiceManager getInstance() {
        if (executorServiceManager == null) {
            synchronized (ThreadManager.class) {
                if (executorServiceManager == null) {
                    executorServiceManager = new ExecutorServiceManager();
                }
            }
        }
        return executorServiceManager;
    }

    /**
     *  創建定時任務
     */
    public void schedule(Runnable runnable,
                         long delay, TimeUnit unit) {
        if (!scheduledExecutorService.isShutdown()) {
            scheduledExecutorService.schedule(runnable, delay, unit);
        }
    }

    /**
     *  創建週期性定時任務
     */
    public void scheduleAtFixedRate(Runnable command,
                                    long initialDelay,
                                    long period,
                                    TimeUnit unit) {
        try {
            if (!scheduledExecutorService.isShutdown()) {
                scheduledExecutorService.scheduleAtFixedRate(command, initialDelay, period, unit);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     *  創建週期性定時任務(又返回值)
     */
    public ScheduledFuture<?> scheduleAtFixedRate2(Runnable command,
                                                   long initialDelay,
                                                   long period,
                                                   TimeUnit unit) {
        try {
            if (!scheduledExecutorService.isShutdown()) {
                return scheduledExecutorService.scheduleAtFixedRate(command, initialDelay, period, unit);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     *  停止所以任務
     */
    public void shutdown() {
        scheduledExecutorService.shutdown();
    }
}

開啓週期性定時任務:

// 每3秒鐘讀取一次數據
 final ScheduledFuture<?> t = ExecutorServiceManager.getInstance().scheduleAtFixedRate2(new Runnable() {
            @Override
            public void run() {
                // 這裏執行你要實現的功能
                readTxtFile(path);
            }
        }, 0, 3, TimeUnit.SECONDS);

定時停止指定任務:

// 5分鐘後停止任務 
ExecutorServiceManager.getInstance().schedule(new Runnable() {
            @Override
            public void run() {
                t.cancel(true);
//                Base.removeFile2(path);
            }
        }, 5, TimeUnit.MINUTES);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章