📄 tasktable.java
字号:
package com.sxit.wap.threads;
import java.io.*;
import java.util.Properties;
import java.util.Enumeration;
import java.util.Date;
import java.util.Vector;
public class TaskTable {
public static final int YEAR = 0;
public static final int MONTH = 1;
public static final int DAY = 2;
public static final int HOUR = 3;
public static final int MINUTE = 4;
public static final int SECOND = 5;
private String threadName = null;//任务线程的类名
private long timeStep = 1000;//间隔的时间
private int timeStepType = YEAR;//间隔时间的类型(年/月/日/时/分/秒)
private long referDate = 0;//参照时间,线程运行的时间与该参照时间的时间差值为时间间隔的整数倍
private static boolean isNeedReload = false;
private static TaskTable[] taskList = null;
private TaskTable ( String threadName, long timeStep, int timeStepType, java.util.Date date ) {
this.threadName = threadName;
this.timeStepType = timeStepType;
this.timeStep = timeStep;
this.referDate = date.getTime ();
java.util.Calendar calendar = java.util.Calendar.getInstance();
long now = System.currentTimeMillis();
//将referDate设置成下一个要启动线程的时刻
while (now > referDate ) {
referDate = getNextTime(referDate) ;
}
}
public long getNextTime(long source){
java.util.Calendar calendar = java.util.Calendar.getInstance();
calendar.setTime (new java.sql.Timestamp (source));
if (timeStepType == YEAR)
calendar.add(java.util.Calendar.YEAR,(int)timeStep);
if (timeStepType == MONTH)
calendar.add(java.util.Calendar.MONTH,(int)timeStep);
if (timeStepType == DAY)
calendar.add(java.util.Calendar.DAY_OF_MONTH,(int)timeStep);
if (timeStepType == HOUR)
calendar.add(java.util.Calendar.HOUR,(int)timeStep);
if (timeStepType == MINUTE)
calendar.add(java.util.Calendar.MINUTE,(int)timeStep);
if (timeStepType == SECOND)
calendar.add(java.util.Calendar.SECOND,(int)timeStep);
return calendar.getTime().getTime();
}
public long getTimeStep () {
//返回该线程启动所需要的时间,单位为毫秒
return referDate - System.currentTimeMillis();
}
public void startTask () {
try {
System.out.println("===================================================================" );
if ("".equals(threadName) || (threadName ==null))
return;
Thread thread = ( Thread ) Class.forName ( this.threadName ).newInstance ();
thread.start ();
referDate = getNextTime(referDate) ;
System.out.println("线程下次运行的时间是:"+ new java.sql.Timestamp (referDate) +"时间间隔是"+timeStep);
//System.out.println ( "ThreadName :" + this.threadName + " " + new java.util.Date () + "-------OK" );
} catch ( Exception ex ) {
ex.printStackTrace();
System.out.println ( "Thread :" + this.threadName + " " + new java.util.Date () + "-------Failed." );
}
}
public void setReload ( boolean isNeedReload ) { //sync
this.isNeedReload = isNeedReload;
}
public static TaskTable[] getTaskList() {//sync
if ( (taskList == null) || (isNeedReload ==true) ) {
System.out.println("得到处理任务的列表................................................");
//获得列表
Properties properties = new Properties();
InputStream input = null;
try {
//input = new FileInputStream("properties.txt");
input = new FileInputStream("properties.txt");
properties.load(input);
int index = 1;
Vector vector = new Vector();
//====================================================================
while ( true ) {
String sIndex = Integer.toString ( index ) ;
String className = properties.getProperty ( "className" + sIndex );
if ( className == null )
break;
className = className.trim ();
String sTime = properties.getProperty ( "timeStep" + sIndex ).trim ();
String sType = properties.getProperty ( "timeSteptype" + sIndex ).trim ();
String sDate = properties.getProperty ( "referDate" + sIndex ).trim ();
long time = Long.parseLong ( sTime );
int type = Integer.parseInt ( sType );
Date date = new java.text.SimpleDateFormat ( "yyyy-MM-dd hh:mm:ss" ).parse ( sDate );
vector.addElement ( new TaskTable ( className, time, type, date ) );
index++;
}
taskList = new TaskTable[ vector.size ()];
for ( int j = 0; j < taskList.length; j++ ) {
taskList[j] = (TaskTable)vector.elementAt(j);
}
//====================================================================
} catch ( Exception ex ) {
ex.printStackTrace ();
} finally {
try {
input.close ();
} catch ( Exception eio ) {
}
}
isNeedReload = false;
}
return taskList;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -