导航:首页 > 编程语言 > java定时器并发

java定时器并发

发布时间:2025-07-10 19:57:55

1. java 定时器 一天有多个时间点执行同一个程序如何实现

import java.util.*;
class MyTime
{
int hour; int minute;
MyTime(int hour,int minute){
this.hour=hour;
this.minute=minute;
}
}
public class AboutTime
{
public static void main(String args[]){
final MyTime mt=new MyTime(11,24);
//这里,假设程序运行时,是在早上8点半之前的。其他情况,你自行分析
Calendar cal=Calendar.getInstance();
//此方法获得当前地域的时间,注意,getInstance是静态方法
cal.set(cal.HOUR, mt.hour);//设置你所要等待的时刻
cal.set(cal.MINUTE, mt.minute);
Calendar cal2=Calendar.getInstance();//
long time1=cal.get(cal.HOUR_OF_DAY)*3600+cal.get(cal.MINUTE)*60;//将两个时刻都转换成秒数,以便进行相减
long time2=cal2.get(cal2.HOUR_OF_DAY)*3600+cal2.get(cal2.MINUTE)*60+cal2.get(cal2.SECOND);
final long waitTime=time1-time2;//此时获得当前时刻与要等待时刻的时间差,单位是秒
//这里说明一下,现在所指的当前时刻是“Calendar cal2=Calendar.getInstance()”这句执行时所获得的时刻
//获得后,它的各值(秒,分,时)等信息都不会改变。当然,运行几行代码,花不了几毫秒。所以
//虽然之前的cal2的时间信息与运行三行代码以后的时间信息是差不多的
System.out.println(waitTime);//此行用于测试
new Thread(new Runnable(){
public void run(){
try{
for(long l=0;l<waitTime;l++){
Thread.sleep(1000);
System.out.println("###");//一秒打一个,当然,告诉你正在计时
//这里用多线程,因为运行后,可以继续运行主线程。不影响你干其他事儿。
}
}
catch(InterruptedException e){}
System.out.println(mt.hour+":"+mt.minute+"到了");
}
}).start();
//不过,你说一天要三次计算。这很容易,如何实现,由你自己决定。
}
}

2. java中每个月第一天执行一次任务的定时器如何实现

Date d = new Date();//获取服务器的时间。。。
Calendar c= Canlendar.getInstance();
c.setTime(d);

if(c.get(Calendar.DAY_OF_MONTH) == 1) //当前是1号
{
//拿出党员的入党日期(年月)同当前月进行比较 如果相同 发送短信
// //写下你的判断代码
}
else //当前不是1号 则从下个月1号开始执行定期任务
{

c.set(Calendar.MONTH,c.get(Calendar.MONTH)+ 1);//设置为下月
c.set(Calendar.DAY_OF_MONTH,1);//设置为下月的1号

Timer timer =new Timer();

timer.scheleAtFixedRate(new TimerTask()
{
public void run()
{
//每天都来判断一下 如果当前日期是1号
////则拿出党员的入党日期(年月)同当前月进行比较 如果相同 发送短信
//run函数里写下你的判断代码
}},c.getTime(),24* 3600*1000); //每天执行一次run()方法...
}

3. 怎么在java在servlet里设置个定时器,使其每隔几个小时自动执行一个任务

  1. 如果是简单的烂代码,写个死循环,获取当前时间,如果时间到了你想要的时候就执行你想要执行的方法。

  2. 如果要写的好点。起一个线程,线程里给个死循环,获取当前时间,如果为你想要的时间,就另外起一个线程跑你要的程序,如果不是则当前线程睡30秒或者1分钟什么的。

4. java定时器 每天凌晨 固定执行一个方法

可以通过以下方式实现,

public class TimerManager {
//时间间隔
private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
public TimerManager() {
Calendar calendar = Calendar.getInstance();
/*** 定制每日:00执行方法 ***/
calendar.set(Calendar.HOUR_OF_DAY, 2);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);

Date date=calendar.getTime(); //第一次执行定时任务的时间

//如果第一次执行定时任务的时间 小于 当前的时间
//此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
if (date.before(new Date())) {
date = this.addDay(date, 1);
}

Timer timer = new Timer();

NFDFlightDataTimerTask task = new NFDFlightDataTimerTask();
//安排指定的任务在指定的时间开始进行重复的固定延迟执行。
timer.schele(task,date,PERIOD_DAY);
}

// 增加或减少天数
public Date addDay(Date date, int num) {
Calendar startDT = Calendar.getInstance();
startDT.setTime(date);
startDT.add(Calendar.DAY_OF_MONTH, num);
return startDT.getTime();
}

}

public class NFDFlightDataTimerTask extends TimerTask {

private static Logger log = Logger.getLogger(NFDFlightDataTimerTask.class);

@Override
public void run() {
try {
//在这里写你要执行的内容

} catch (Exception e) {
log.info("-------------解析信息发生异常--------------");
}
}
}

public class NFDFlightDataTaskListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
new TimerManager();
}
public void contextDestroyed(ServletContextEvent event) {
}

}

然后要在web.xml里面配置监听器
<listener>
<listener-class>
com.listener.NFDFlightDataTaskListener
</listener-class>
</listener>

5. 怎样用java做个定时器,每个星期一中午12点整执行doXX这一动作。越详细越好.用监听哥跪谢!

主类:
package tiwen4; import java.util.Calendar; import java.util.Timer; public class quartz { public static void main(String[] args) { try{ Calendar cal = Calendar.getInstance();//设置定时时间 cal.add(Calendar.DATE, 0);//表示从今天的12点开始跑起来,如果当前时间超过12点会马上跑一次,否则等12点再跑第一次 cal.set(Calendar.HOUR_OF_DAY, 12);//24小时制的,12就是中午12点 cal.set(Calendar.MINUTE, 0);//分 cal.set(Calendar.SECOND, 0);//秒 Timer processTimer = new Timer(); processTimer.scheleAtFixedRate(new ProcessClass(), cal.getTime(), 86400000);//86400000是24小时,即24小时跑一次 }catch(Exception e){ e.printStackTrace(); }finally{ } } }

定时器调用的类--我在这里只是输出了一下~你也可以自己加函数:
package tiwen4; import java.util.TimerTask; public class ProcessClass extends TimerTask { @Override public void run() { // TODO Auto-generated method stub System.out.println("输出了哈哈");// } }

我上面用的只是一种方式,其实定时方式有很多的linux和window都有自带的定时器,可以直接调用,也可以用上面所说的quartz包带的框架等等

6. java怎样启动定时器

private void goTimer() {
Timer timmerTask = new Timer();
Calendar calEnviron = Calendar.getInstance();
// 每天的02:00.am开始执行
calEnviron.set(Calendar.HOUR_OF_DAY, 2);
calEnviron.set(Calendar.MINUTE, 00);
// date为制定时间
Date dateSetter = new Date();
dateSetter = calEnviron.getTime();
// nowDate为当前时间
Date nowDateSetter = new Date();
// 所得时间差为,距现在待触发时间的间隔
long intervalEnviron = dateSetter.getTime() - nowDateSetter.getTime();
if (intervalEnviron < 0) {
calEnviron.add(Calendar.DAY_OF_MONTH, 1);
dateSetter = calEnviron.getTime();
intervalEnviron = dateSetter.getTime() - nowDateSetter.getTime();
}
// 每24小时执行一次,启动启动启动启动启动
timmerTask.schele(new UseTimer(timmerTask), intervalEnviron, 1 * 1000 * 60 * 60 * 24);
}

7. java三十分钟循环一次代码

这个有两种方法:
一、你设置一个定时器,让定时器每个三十分钟执行一次,然后调用相关的程序。
二、你把程序放在线程里,然后每次循环处理完之后调用sleep函数,让线程睡眠三十分钟之后继续循环。
两种方法的区别:
第一种方法用定时器实现,系统记录时间,时间达到条件就会执行,期间不占用资源;
第二种方法是让程序睡眠三十分钟,在睡眠期间线程锁还是被当前的这个线程占用着的,其他线程将得不到执行的机会。

阅读全文

与java定时器并发相关的资料

热点内容
一号农业文件是多少 浏览:206
pdf文件打开不能正常显示文字 浏览:70
jsp无刷新 浏览:261
编程猫怎么下载到电脑 浏览:888
vbnet和excel文件 浏览:454
科密数据库如何安装 浏览:725
微信朋友圈重复发三遍内容 浏览:957
苹果4屏幕总成好换吗 浏览:386
qq缩小之后就找不到了 浏览:532
cad中bin文件夹是什么 浏览:535
仿真和编程哪个难 浏览:995
cexcel复制格式文件 浏览:351
res文件如何打开 浏览:182
健康营养师app接口 浏览:817
环境变量文件夹 浏览:727
微信账号及密码大全 浏览:243
什么算论文数据造价 浏览:391
如何找回多点app抽奖界面 浏览:474
文章网站后台管理系统 浏览:81
销售数据环比怎么表达 浏览:161

友情链接