jfinalQ開發教程08-qiao-util.jar:多執行緒和定時任務
阿新 • • 發佈:2018-11-01
多執行緒
多執行緒是java面試中最愛問的一個問題,當然如果工作多年沒準備去面試,正好讓你手寫程式碼,那就只能呵呵了~
QThreadUtil
com.uikoo9.util.function.QThreadUtil對java自帶的多執行緒做了封裝,其實java自帶多執行緒已經很強大了。
public class QThreadUtil { /** * 單執行緒池執行執行緒 * @param runnable */ public static void runSingle(Runnable runnable){ run(Executors.newSingleThreadExecutor(), runnable); } /** * 固定大小執行緒池執行執行緒 * @param runnable */ public static void runFixed(Runnable runnable, int n){ run(Executors.newFixedThreadPool(n), runnable); } /** * 可變大小執行緒池執行執行緒 * @param runnable */ public static void runCached(Runnable runnable){ run(Executors.newCachedThreadPool(), runnable); } /** * 定時執行緒池執行執行緒 * @param runnable * @param n * @param period */ public static void runScheduledBySeconds(Runnable runnable, int n, long period){ runScheduled(runnable, n, 0, period, TimeUnit.SECONDS); } /** * 定時執行緒池執行執行緒 * @param runnable * @param n * @param idelay * @param period * @param unit */ public static void runScheduled(Runnable runnable, int n, long idelay, long period, TimeUnit unit){ ScheduledExecutorService executor = Executors.newScheduledThreadPool(n); executor.scheduleAtFixedRate(runnable, idelay, period, unit); } /** * 執行緒池執行執行緒 * @param executor * @param runnable */ private static void run(ExecutorService executor, Runnable runnable){ executor.execute(runnable); executor.shutdown(); } }
不要還停留在常見的兩種面試多執行緒實現的方式上,java有更高階的實現方式:執行緒池服務。
上面列舉了幾種常見的多執行緒:
單執行緒池執行執行緒
固定大小執行緒池執行執行緒
可變大小執行緒池執行執行緒、
定時執行緒池執行執行緒
定時執行緒
除了單獨開一個執行緒去執行一些操作外,定時執行緒是使用的最多的操作,其實已經有點類似簡單的定時任務了,
下面是一段示例程式碼,每小時生成一次七牛雲的token,很多服務的token都需要定時做重新整理,
/** * 生成uptoken */ public static void genUptoken(){ ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); executor.scheduleAtFixedRate(new Runnable() { public void run() { uptoken = getUptoken(); } }, 0, 3500, TimeUnit.SECONDS); }
定時任務
常見定時任務元件
java中常見的定時任務元件有:cron4j和quartz,jfinalQ選擇了小巧的cron4j
使用
1.jar
首先需要引入cron4j-2.2.5.jar,
2.jfinalconfig
在QJfinalConfig中需要新增:
@Override
public void afterJFinalStart() {
// 初始化所有的定時任務
QCron4jUtil.initTasks();
}
3.配置檔案
最後在config.properties中配置定時任務:
# cron4j properties cron4j.enable=false cron4j.job1.pattern=21 * * * * cron4j.job1.task=com.uikoo9.z.my.MyTask
比較簡單,第一個是是否開啟定時任務,第二個是定時任務的規則,第三個是定時任務的實現類,
如果有多個定時任務,請一次寫:job1,job2...
4.實現類
實現類也比較簡答,給一個示例:
public class MyTask extends Task{
private PlanService planService = Duang.duang(PlanService.class);
@Override
@SuppressWarnings("static-access")
public void execute(TaskExecutionContext arg0) throws RuntimeException {
planService.initPlanDetail();
// System.out.println(1);
}
}
jfinalQ2.0
原始碼:https://github.com/uikoo9/jfinalQ
更多精彩內容:http://uikoo9.com/
求打賞(長按圖片即可識別)~ |
捐助列表:http://uikoo9.com/donate/ |