java间隔指定时间后运行代码可取消
成都创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站设计、成都网站制作、外贸网站建设、皮山网络推广、小程序开发、皮山网络营销、皮山企业策划、皮山品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联为所有大学生创业者提供皮山建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com
java间隔指定时间后运行枝镇闹代码可取消定时任务
使用java.util.Timer类来实现定时任务,它可以定期执行任务,也可以在指定的时间点执行任务。
示例代码:
import java.util.Timer;
import java.util.TimerTask;
public class TimerTest {
public static void main(String[] args) {
// 创建一个定时器
Timer timer = new Timer();
// 创建一个定时任务
TimerTask task = new TimerTask() {
@Override
public void run() {
System.out.println("旅盯定时猛罩任务开始执行");
}
};
// 使用定时器安排定时任务在2秒后开始执行,每隔2秒重复执行
timer.schedule(task, 2000, 2000);
// 取消定时任务
timer.cancel();
}
}
JAVA中定时自动完成任务的实现要用到JAVA中的定时器TimerTask和监听器 听起来貌似有点困难但是实现起来还是比较容易的!纸老虎~~!
下面的列子很雹核详细 是关于定时向服务器上传(也可以是其他的动腔侍作这是看需要关于上传我博客有写过可以参考)文件的列子简单的 步就可以实现
首先创建动作bean
package sun time ;
public class UploadFile{
/**
*实现上传的代码s省略 可以看下我下面的 篇日志
__haiming/blog/static/ / 使用 *** arupload 实现上传下载[有例子]
__haiming/blog/static/ / 使用Struts 多文件上传
*/
public void upload()
{
System out println( 系统自动的上传文件了 );
}
}
创建定时器MyTaker并完成相应的功能
package sun time ;
import java util Calendar;
import java util TimerTask;
import javax servlet ServletContext;
public class MyTaker extends TimerTask {
private static boolean isRun = false;
private ServletContext context ;
private Calendar ca = Calendar getInstance();
public MyTaker(ServletContext context)
{
ntext = context;
}
@Override
public void run() {
if(!isRun){
if( ==ca get(Calendar MINUTE)){
isRun = true;
context log( 正在执行所加载的伍肆吵任务 );
UploadFile uf= new UploadFile();
uf upload();
isRun =false;
context log( 任务顺利完成 );
}
}
else
{
System out println( 任务还没有执行完毕 );
}
}
}
创建监听器ContextListener
package sun time ;
import javax servlet ServletContextEvent;
import javax servlet ServletContextListener;
import sun time MyTaker;
import java util *;
public class ContexListener implements ServletContextListener{
private Timer timer = null;
@Override
public void contextDestroyed(ServletContextEvent event) {
timer cancel();
event getServletContext() log( 任务列表已经销毁了 );
}
@Override
public void contextInitialized(ServletContextEvent event) {
timer = new Timer(true);
event getServletContext() log( 服务器已经启动了 );
timer schedule(new MyTaker(event getServletContext()) );///每隔多长时间检查扫描一次
event getServletContext() log( 已经加载了任务的列表 );
}
}
最后一步就是在web xml中配置监听
! Java定时器
listener
listener class sun time ContexListener/listener class
lishixinzhi/Article/program/Java/hx/201311/26450
1、ZSet 实现方式
通过 ZSet 实现定时任务的思路是,将定时任务姿洞逗存放到 ZSet 集合中迹卖,并且将过期时间存储到 ZSet 的 Score 字段中,然后通过一个无线循环来判断当前时间内是否有需要执行的定时任务,如果有则进行执行,具体实现代码如下:
import redis.clients.jedis.Jedis;
import utils.JedisUtils;
import java.time.Instant;
import java.util.Set;
public class DelayQueueExample {
private static final String _KEY = "DelayQueueExample";
public static void main(String[] args) throws InterruptedException {
Jedis jedis = JedisUtils.getJedis();
// 30s 后执行
long delayTime = Instant.now().plusSeconds(30).getEpochSecond();
jedis.zadd(_KEY, delayTime, "order_1");
// 继续添加测试数据
jedis.zadd(_KEY, Instant.now().plusSeconds(2).getEpochSecond(), "order_2");
jedis.zadd(_KEY, Instant.now().plusSeconds(2).getEpochSecond(), "order_3");
jedis.zadd(_KEY, Instant.now().plusSeconds(7).getEpochSecond(), "order_4");
jedis.zadd(_KEY, Instant.now().plusSeconds(10).getEpochSecond(), "order_5");
// 开启定时任务队列颤亏
doDelayQueue(jedis);
}
/**
* 定时任务队列消费
* @param jedis Redis 客户端
*/
public static void doDelayQueue(Jedis jedis) throws InterruptedException {
while (true) {
// 当前时间
Instant nowInstant = Instant.now();
long lastSecond = nowInstant.plusSeconds(-1).getEpochSecond();
// 上一秒时间
long nowSecond = nowInstant.getEpochSecond();
// 查询当前时间的所有任务
Set data = jedis.zrangeByScore(_KEY, lastSecond, nowSecond);
for (String item : data) {
// 消费任务
System.out.println("消费:" + item);
}
// 删除已经执行的任务
jedis.zremrangeByScore(_KEY, lastSecond, nowSecond);
Thread.sleep(1000); // 每秒查询一次
}
}
}
登录后复制

2、键空间通知
我们可以通过 Redis 的键空间通知来实现定时任务,它的实现思路是给所有的定时任务设置一个过期时间,等到了过期之后,我们通过订阅过期消息就能感知到定时任务需要被执行了,此时我们执行定时任务即可。
默认情况下 Redis 是不开启键空间通知的,需要我们通过 config set notify-keyspace-events Ex 的命令手动开启,开启之后定时任务的代码如下