1、异步任务
异步方法调用是相当于多个线程执行,不需要等待上一行代码的执行结果。
使用方法:
启动类上面使用@EnableAsync注释,表示开启异步方法调用;
方法上使用@Async注解,来表示这是个异步方法;
Future 用于接收异步方法的返回类型;
-
- get() 获取异步返回值
- isDone() 判断异步方法是否完成
- isCancelled 是否取消
- cancel() 取消
@Async public Future<String> sayHello(){ try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("你好啊啊..."); return new AsyncResult<String>("我任务返程了"); }
2、任务调度
使用方法:
启动类上面使用@EnableScheduling注释,表示开启定时方法调用;
方法上使用@Scheduled注解,来表示这是个定时方法;@Scheduled中的cron属性,用于定义时间点;
// 秒 分 时 天 月 周几 @Scheduled(cron = "3 * * * * ?") public void sayHello(){ System.out.println("早上好"); }
cron表达式说明:
域名 | 可取值 | 可取符号(仅列部分常用) |
秒域 | 0~59的整数 | * - , / |
分域 | 0~59的整数 | * - , / |
时域 | 0~23的整数 | * - , / |
日域 | 1~31的整数 | * - , / ? L |
月域 | 1~12的整数或JAN~DEC | * - , / |
周域 | 1~7的整数或SUN~SAT | * - , / ? L # |
符号的意义:
* 表示可以匹配该域的所有值;
?在cron表达式中必须出现且只能出现1次,用在日域或周域上,表示不确定值、不限制值;
- 表示匹配该域上的一个范围;
, 表示枚举值;
/ 表示起始时间和间隔时间;
# 只能用于周域上,#后面的数字表示第几周,如果不存在这个周的值,则不执行;
L 只能用于日域或周域,用于日域时表示当月最后一天,用于周域如果前面不加数字表示周六,加数字表示最后一个周值;