在java中,可以使用Timer和TimerTask进行任务调度。
Timer和TimerTask可以做为实现线程的第三种方式,前两中方式分别是继承自Thread类和实现Runnable接口。
Timer是一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask。TimerTask是一个抽象类,实现了Runnable接口,所以具备了多线程的能力。
下面的案例是使用Timer和TimerTask进行简单的定时任务调度,这个任务是进行java运行环境检测。
--------------------------------------JavaEnvironment.java-------------------------------------
package com.wx.pub;
import java.io.Serializable;
/**
* 实体类,保存java运行环境信息
* @author Administrator
* 20160528
*/
public class JavaEnvironment implements Serializable{
private static final long serialVersionUID = 1L;
private String userName; //当前登录用户名
private String osName; //操作系统名
private String osVersion; //操作系统版本
private String osJaGou; //操作系统架构
private String javaFactory; //JAVA的厂商名
private String javaVersion; //JAVA的版本号
private String userHome; //当前登录用户的主目录
private String totalMemory; //当前JVM的总内存
private String maxMemory; //当前JVM最大可用内存
private String freeMemory; //当前JVM可用的空闲内存
private String clientHostName; //主机名
private String clientIP; //ip地址
public String getClientHostName() {
return clientHostName;
}
public void setClientHostName(String clientHostName) {
this.clientHostName = clientHostName;
}
public String getClientIP() {
return clientIP;
}
public void setClientIP(String clientIP) {
this.clientIP = clientIP;
}
public String getFreeMemory() {
return freeMemory;
}
public void setFreeMemory(String freeMemory) {
this.freeMemory = freeMemory;
}
public String getJavaFactory() {
return javaFactory;
}
public void setJavaFactory(String javaFactory) {
this.javaFactory = javaFactory;
}
public String getJavaVersion() {
return javaVersion;
}
public void setJavaVersion(String javaVersion) {
this.javaVersion = javaVersion;
}
public String getMaxMemory() {
return maxMemory;
}
public void setMaxMemory(String maxMemory) {
this.maxMemory = maxMemory;
}
public String getOsJaGou() {
return osJaGou;
}
public void setOsJaGou(String osJaGou) {
this.osJaGou = osJaGou;
}
public String getOsName() {
return osName;
}
public void setOsName(String osName) {
this.osName = osName;
}
public String getOsVersion() {
return osVersion;
}
public void setOsVersion(String osVersion) {
this.osVersion = osVersion;
}
public String getTotalMemory() {
return totalMemory;
}
public void setTotalMemory(String totalMemory) {
this.totalMemory = totalMemory;
}
public String getUserHome() {
return userHome;
}
public void setUserHome(String userHome) {
this.userHome = userHome;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String toString(){
return userName+" \""+
osName+"\" "+
osVersion +" "+
osJaGou +" "+
userHome +" "+
clientHostName+" "+
clientIP+" \n"+
javaFactory +" "+
javaVersion +" "+
totalMemory +" "+
maxMemory +" "+
freeMemory+"\n-----------这是分隔线---------------\n"
;
}
}
--------------------------------------------CheckEnvOnce.java---------------------------------------------
package com.wx.pub;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Timer;
import java.util.TimerTask;
/**
* 定时进行运行环境检查
* @author Administrator
* 20160528
*/
public class CheckEnvOnce {
public static void main(String[] args) {
//三秒后执行一次
//new Timer().schedule(new CheckTask1(), 3000);
//三秒后,每隔一秒执行一次
new Timer().schedule(new CheckTask1(), 3000,1000);
}
}
class CheckTask1 extends TimerTask{
public void run() {
try {
JavaEnvironment javaInfo=new JavaEnvironment();
javaInfo.setUserName(System.getProperty("user.name"));
javaInfo.setOsName(System.getProperty("os.name"));
javaInfo.setOsVersion(System.getProperty("os.version"));
javaInfo.setOsJaGou(System.getProperty("os.arch"));
javaInfo.setJavaFactory(System.getProperty("java.vendor"));
javaInfo.setJavaVersion(System.getProperty("java.version"));
javaInfo.setUserHome(System.getProperty("user.home"));
javaInfo.setTotalMemory((Runtime.getRuntime().totalMemory())/1024.0/1024.0+"mb");
javaInfo.setMaxMemory(Runtime.getRuntime().maxMemory()/1024.0/1024.0+"mb");
javaInfo.setFreeMemory(Runtime.getRuntime().freeMemory()/1024.0/1024.0+"mb");
javaInfo.setClientIP(InetAddress.getLocalHost().getHostAddress());
javaInfo.setClientHostName(InetAddress.getLocalHost().getHostName());
System.out.println(javaInfo);
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
运行结果如下:
Administrator "Windows Vista" 6.1 x86 C:\Users\Administrator USER-20170426CY 169.254.130.6
Sun Microsystems Inc. 1.6.0_13 4.9375mb 63.5625mb 4.652458190917969mb
-----------这是分隔线---------------
Administrator "Windows Vista" 6.1 x86 C:\Users\Administrator USER-20170426CY 169.254.130.6
Sun Microsystems Inc. 1.6.0_13 4.9375mb 63.5625mb 4.6231231689453125mb
-----------这是分隔线---------------
Administrator "Windows Vista" 6.1 x86 C:\Users\Administrator USER-20170426CY 169.254.130.6
Sun Microsystems Inc. 1.6.0_13 4.9375mb 63.5625mb 4.6231231689453125mb
-----------这是分隔线---------------
Administrator "Windows Vista" 6.1 x86 C:\Users\Administrator USER-20170426CY 169.254.130.6
Sun Microsystems Inc. 1.6.0_13 4.9375mb 63.5625mb 4.605140686035156mb
-----------这是分隔线---------------
Administrator "Windows Vista" 6.1 x86 C:\Users\Administrator USER-20170426CY 169.254.130.6
Sun Microsystems Inc. 1.6.0_13 4.9375mb 63.5625mb 4.605140686035156mb
-----------这是分隔线---------------
Administrator "Windows Vista" 6.1 x86 C:\Users\Administrator USER-20170426CY 169.254.130.6
Sun Microsystems Inc. 1.6.0_13 4.9375mb 63.5625mb 4.605140686035156mb
-----------这是分隔线---------------
Administrator "Windows Vista" 6.1 x86 C:\Users\Administrator USER-20170426CY 169.254.130.6
Sun Microsystems Inc. 1.6.0_13 4.9375mb 63.5625mb 4.605140686035156mb
-----------这是分隔线---------------
Administrator "Windows Vista" 6.1 x86 C:\Users\Administrator USER-20170426CY 169.254.130.6
Sun Microsystems Inc. 1.6.0_13 4.9375mb 63.5625mb 4.587593078613281mb
-----------这是分隔线---------------
。。。。。。
要使用更强大的调度工具,请参考Quartz框架。