jfinalQ开发教程08-qiao-util.jar:多线程和定时任务

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/uikoo9/article/details/49022269

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/

猜你喜欢

转载自blog.csdn.net/uikoo9/article/details/49022269