java中的定时 想实现个功能,触发某个事件后 执行一个循环 每隔单位时间 执行一段代码 至到满足条件跳出循环或结束程序.不知道有什么方法实现 每隔单位时间,Thread.sleep, timer...... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 import java.util.Timer;import java.util.TimerTask;public class Test { public static void main(String[] args) { final Timer timer = new Timer(); timer.schedule(new TimerTask() { int count = 0; @Override public void run() { System.out.println(count); ++count; if (count > 10) { timer.cancel(); System.out.println("Timer is stopped."); } } }, 0, 500); }} 时间长的话 用crontab 或 计划任务 //通过定时器进行任务的执行是比较常见的情况,下面的是个简单的示例:主要借助于监听器和TimerTask//和Timer类进行实现,另外spring提供了定时器的高级实现好像是quarts. package com.rx.timer; import java.util.Date; import java.util.TimerTask; public class MyTask extends TimerTask { @Override public void run() { System.out.println("call at " + (new Date())); } } package com.rx.timer; import java.util.Timer; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class MyListen implements ServletContextListener { private Timer timer = null; @Override public void contextDestroyed(ServletContextEvent arg0) { timer.cancel(); } @Override public void contextInitialized(ServletContextEvent arg0) { timer = new Timer(true); //设置任务计划,启动和间隔时间 timer.schedule(new MyTask(), 0, 1000 * 10); //或者 timer.schedule(new MyTask(), new Date(), 1000 * 10); //第一个参数指定执行的线程,第二个参数指定第一次日期执行的时间,第三个参数指定每格多久再次执行一次 } } --Oracle中的定时器begin sys.dbms_job.submit(job => :job, what => 'check_err;', next_date => trunc(sysdate)+23/24, interval => 'trunc(next_day(sysdate,''星期五''))+23/24'); commit;end;/* 其中:job是系统自动产生编号,check_err是自己的一个过程或函数,next_date设置下次执行时间,这里是今天晚上23:00,interval设置时间间隔,多久执行一次,这里是每周的星期五晚上23:00,函数next_day返回日期中包含指定字符的日期,trunc 函数去掉日期里的时间,也就是得到的是某天的00:00,时间是以天为单位的所以要得到某某点某某分,就需要分数:*/--1、 每分钟执行Interval => TRUNC(sysdate,’mi’) + 1 / (24*60)--2、 每天定时执行例如:每天的凌晨2点执行Interval => TRUNC(sysdate) + 1 +2 / (24)--3、 每周定时执行--例如:每周一凌晨2点执行Interval => TRUNC(next_day(sysdate,'星期一'))+2/24--4、 每月定时执行--例如:每月1日凌晨2点执行Interval =>TRUNC(LAST_DAY(SYSDATE))+1+2/24--5、 每季度定时执行--例如每季度的第一天凌晨2点执行Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 2/24--6、 每半年定时执行--例如:每年7月1日和1月1日凌晨2点Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24--7、 每年定时执行--例如:每年1月1日凌晨2点执行Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24 过了周末,回来看这么多人回复,谢谢如果用timer的话,那么是不是每次请求就有一个线程,如果我的请求很多的话线程就很多了,如果用quartz这种计划任务每秒调度一次会不会更好点 java如何识别文本里的制表符? 关于GMT和CST的问题 需要一个JSP熟手帮忙,要懂ORACLE 提取邮件信息 请教,关于hanoi的问题 这是这么回事? 高手帮忙:我在linux用gcj编译一个java程序,先用javac把其编译为class文件,再用gcj编译,可是出现如下错误,而直接用java虚拟机来执行 关于jbuilder8的问题! 求APPLET解决方案 请问ArrayList和Vector哪个好? 一个算法问题,请教各位 Java初学者的小疑惑
import java.util.TimerTask;public class Test {
public static void main(String[] args) {
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
int count = 0; @Override
public void run() {
System.out.println(count);
++count;
if (count > 10) {
timer.cancel();
System.out.println("Timer is stopped.");
}
}
}, 0, 500);
}
}
//通过定时器进行任务的执行是比较常见的情况,下面的是个简单的示例:主要借助于监听器和TimerTask
//和Timer类进行实现,另外spring提供了定时器的高级实现好像是quarts. package com.rx.timer;
import java.util.Date;
import java.util.TimerTask;
public class MyTask extends TimerTask {
@Override
public void run() {
System.out.println("call at " + (new Date()));
}
}
package com.rx.timer;
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyListen implements ServletContextListener {
private Timer timer = null;
@Override
public void contextDestroyed(ServletContextEvent arg0) {
timer.cancel();
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
timer = new Timer(true);
//设置任务计划,启动和间隔时间
timer.schedule(new MyTask(), 0, 1000 * 10); //或者 timer.schedule(new MyTask(), new Date(), 1000 * 10); //第一个参数指定执行的线程,第二个参数指定第一次日期执行的时间,第三个参数指定每格多久再次执行一次
}
}
--Oracle中的定时器
begin
sys.dbms_job.submit(job => :job,
what => 'check_err;',
next_date => trunc(sysdate)+23/24,
interval => 'trunc(next_day(sysdate,''星期五''))+23/24');
commit;
end;
/*
其中:job是系统自动产生编号,check_err是自己的一个过程或函数,next_date设置下次执行时间,这里是今天晚上23:00,interval设置时间间隔,多久执行一次,这里是每周的星期五晚上23:00,函数next_day返回日期中包含指定字符的日期,trunc 函数去掉日期里的时间,也就是得到的是某天的00:00,时间是以天为单位的所以要得到某某点某某分,就需要分数:
*/--1、 每分钟执行
Interval => TRUNC(sysdate,’mi’) + 1 / (24*60)--2、 每天定时执行例如:每天的凌晨2点执行Interval => TRUNC(sysdate) + 1 +2 / (24)--3、 每周定时执行--例如:每周一凌晨2点执行Interval => TRUNC(next_day(sysdate,'星期一'))+2/24--4、 每月定时执行--例如:每月1日凌晨2点执行Interval =>TRUNC(LAST_DAY(SYSDATE))+1+2/24--5、 每季度定时执行--例如每季度的第一天凌晨2点执行Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 2/24--6、 每半年定时执行--例如:每年7月1日和1月1日凌晨2点Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24--7、 每年定时执行--例如:每年1月1日凌晨2点执行Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24