SpringTask的入门使用

本文介绍Spring框架中定时任务的实现方式,包括XML配置和注解方式,并详细解释了@Scheduled注解的各种参数,如cron表达式和fixedDelay等。

Spring Task

一、Spring Task简介

1.定时任务

3.三种完成方法

1.java自带的API java.util.Timer类 java.util.TimerTask类

2.Quartz框架 开源 功能强大 使用起来稍显复杂

3.Spring 3.0以后自带了task 调度工具,比Quartz更加的简单方便

 

二、开发环境准备

1.创建一个JavaWeb项目

2.引入jar包

3.基本的配置

 

三、如何使用

1.纯xml配置的方式

a.简单定时任务

实现业务功能+配置定时间规则

b.复杂定时任务

cron表达式

 

 

2.全注解的方式

a.在业务方法上提供注解 @Service @Scheduled(参数相同)

b.开启注解支持

 

@Scheduled所支持的参数: 

1. cron:cron表达式,指定任务在特定时间执行; 

2. fixedDelay:表示上一次任务执行完成后多久再次执行,参数类型为long,单位ms; 

3. fixedDelayString:与fixedDelay含义一样,只是参数类型变为String; 

4. fixedRate:表示按一定的频率执行任务,参数类型为long,单位ms; 

5. fixedRateString: 与fixedRate的含义一样,只是将参数类型变为String; 

6. initialDelay:表示延迟多久再第一次执行任务,参数类型为long,单位ms; 

7. initialDelayString:与initialDelay的含义一样,只是将参数类型变为String; 

8. zone:时区,默认为当前时区,一般没有用到。

 

 

springboot使用:

启动类:

testtask2

 

 

SpringTask 默认是单线程的 上面的两个定时任务使用的都是同一个线程;在实际开发中,不希望所有的任务都运行在一个线程中,想要改成多线程,给SpringTask提供一个多线程的TaskScheduler,Spring已经有默认实现

结果:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

### glibc 中 `malloc()` 的内存分配范围与限制 `malloc()` 是 C 标准库中的一个重要函数,用于动态分配内存。其行为受到底层实现的影响,在 GNU libc (glibc) 中,`malloc()` 基于 ptmalloc 实现[^1]。以下是关于用户程序中使用 `malloc()` 申请内存空间时可能遇到的范围和限制: #### 1. **单次分配的最大大小** 单次调用 `malloc(size)` 所能申请的最大内存取决于多个因素: - 系统可用虚拟地址空间:在 32 位系统上,通常最大可寻址空间为 4GB;而在 64 位系统上,则几乎没有实际限制。 - 进程剩余的堆空间:如果进程已经占用了大量堆空间,那么剩下的可供分配的空间可能会小于理论上的最大值。 - 操作系统的资源限制:Linux 提供了诸如 `/proc/sys/vm/max_map_count` 和 ulimit 参数来控制每个进程可以映射的页数或文件描述符数量。 如果尝试分配超过允许范围的内存(例如示例代码中的 1GB),则可能导致失败并返回 NULL[^2]。 #### 2. **总内存消耗的限制** 虽然每次单独调用 `malloc()` 可以成功获取一定量的内存,但如果累积多次调用导致总体占用超出某个阈值,也可能触发错误。具体来说: - Linux 下存在 per-process memory limits 设置,可通过命令 `ulimit -v` 查看当前 shell session 对应的虚拟内存上限; - 当接近这些边界条件时,即使后续请求较小尺寸的数据块仍有可能遭到拒绝。 #### 3. **延迟提交机制带来的影响** 需要注意的是现代操作系统普遍采用一种叫做“懒惰分配”或者叫“延迟提交”的技术手段。这意味着当第一次执行像上面那样的大容量分配操作时,并不会立刻真正从物理 RAM 或交换分区那里获得相应区域——直到实际写入数据之前都只是预留了一个逻辑位置而已。因此即便看似成功的完成了超大规模的 malloc 请求,也不代表一定能正常使用这部分存储单元。 ```c #include <stdio.h> #include <stdlib.h> int main(){ size_t gb = 1024*1024*1024; void *p = malloc(gb); if(p !=NULL){ printf("Allocated %zu bytes\n",gb); // Try accessing the allocated region to force real allocation. memset(p,'A',gb); free(p); }else{ perror("Failed to allocate"); } return EXIT_SUCCESS; } ``` 以上代码片段展示了如何强制让 OS 完成整个 gigabyte 大小的实际分配过程而不是仅仅停留在理论上允诺阶段的方法之一 —— 向新近取得指针所指向的位置填充字符 'A' 。这样做之后再检查是否仍然能够顺利完成全部流程即可验证真实情况下的可行性。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值