Java定时任务ScheduledThreadPoolExecutor(一)

2014-11-24 09:01:41 · 作者: · 浏览: 7

以前定时任务一直用Timer这个类,后来发现ScheduledThreadPoolExecutor功能更强大,我们先看个简单的示例,然后再看看API中的描述:


这个定时任务是我的项目中,每隔5分钟去检查设备的在线状态的。
[java]
public class CheckDeviceStateExcuter {

private static final Log log = LogFactory.getLog(CheckDeviceStateExcuter.class);

private static final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

private static DeviceDao deviceDao = new DeviceDaoImpl();
private static List devices = new ArrayList();

// invoke DLL method to get the details of device
static JoymindCommDLLLib instance = JoymindCommDLLLib.INSTANCE;
// check states
public static void checkStart() {
final Runnable checker = new Runnable() {
public void run() {
System.out.println("check");
devices = deviceDao.queryDevices();
for(DeviceDTO device : devices){
String ip = device.getIp();
String id = "auto_refresh_" + ip;
String iniPath = XmlOperationTool.PLAYLIST_TEMPFILE_FOLDER + id
+ ".ini";
int flag = instance.GetSysInfo(ip, iniPath);

if(flag == 1){
// get ini file
SystemInfoDTO info = null;
try {
info = FileOperationTool.parseIni(iniPath);

device.setMacAdd(info.getMacAddress());
device.setIp(info.getIp());
device.setGateway(info.getGateway());
device.setOnlineState("在线");
device.setBootTime(info.getBootTime());
device.setDeviceVersion(info.getVersion());
device.setAvailableSpace(info.getFreedisk());

device.setpNo(info.getpNo());
device.setWidth(info.getWidth());
device.setHeight(info.getHeight());
device.setStorage(info.getStorage());
device.setTime(info.getTime());
device.setPrgTotal(info.getPrgTotal());
device.setPrgIndex(info.getPrgIndex());
device.setStatusNo(info.getStatus());

if (info.getStorage().equals("1")) {
device.setStorageName("FLASH存储");
}
if (info.getStorage().equals("2")) {
device.setStorageName("RAM存储");
}
if (info.getStorage().equals("3")) {
device.setStorageName("SD卡存储");
}

device.setCurrentPlaylist("");
device.setCurrentTemplate("");
device.setLastCommunicateTime("");
device.setCurrentTransferFileName("");
dev