我這裏只是記錄一下,所以我不會進行詳細解讀。
線程池管理工具
/**
* 線程池管理類
*
* @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);