1. 程式人生 > >jfinalQ開發教程08-qiao-util.jar:多執行緒和定時任務

jfinalQ開發教程08-qiao-util.jar:多執行緒和定時任務

the_web_enabled_business_1x.jpg

多執行緒

多執行緒是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

官網:http://uikoo9.com/jfinalQ

原始碼:https://github.com/uikoo9/jfinalQ


更多精彩內容:http://uikoo9.com/


求打賞(長按圖片即可識別)~
微信 捐助列表:http://uikoo9.com/donate/