java在servlet里设置个定时器,让其在tomcat一运行时,自动每隔几个小时执行一个任务?
推荐于2017-11-25 · 知道合伙人软件行家
看你要求 如果复杂的定时 可以使用 定时框架 quartz,如果简单的定时可以使用
package test;
import java.util.Timer;
public class TimeTaskTest {
public static void main(String[] args){
Timer timer = new Timer();
timer.schedule(new Task(), 60 * 1000);
}
}
package test;
import java.util.TimerTask;
public class Task extends TimerTask {
public void run()
{
System.out.println("定时任务执行");
}
}
我的需求很简单,就是每隔24小时,清空hashmap,但我的是个网站,需要放在服务器上,我每次运行,都要运行个main方法吗?又没有随着项目一起启动的方法?
你可以定义一个 监听器来在项目启动的时候 执行他
在 web.xml中配置
<listener>
<listener-class>com.init.InitData</listener-class>
</listener>
public class InitData implements ServletContextListener{
@Override
public void contextDestroyed(ServletContextEvent arg0) {
// web停止时执行
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
//web 启动时执行
}
}
2015-01-24 · 知道合伙人软件行家
当Servlet容器创建的时候会执行,也就是说你的tomcat一启动就会执行一次contextInitialized(ServletContextEvent event);
写好这个类以后,要web.xml里做一下配置
<listener>
<listener-class>这里用你的这个类的包名加类名</listener-class>
</listener>
如果是简单的烂代码,写个死循环,获取当前时间,如果时间到了你想要的时候就执行你想要执行的方法。
如果要写的好点。起一个线程,线程里给个死循环,获取当前时间,如果为你想要的时间,就另外起一个线程跑你要的程序,如果不是则当前线程睡30秒或者1分钟什么的。
代码如下:
public class Task1
{public static void main(String[] args) {
// run in a second
final long timeInterval = 1000;
Runnable runnable = new Runnable() {
public void run() {
while (true) {
// ------- code for task to run
System.out.println("Hello !!");
// ------- ends here
try {
Thread.sleep(timeInterval);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};Thread thread = new Thread(runnable);
thread.start();
}
}