国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java基于線程池和反射機制實現定時任務完整實例

2019-11-26 14:53:16
字體:
來源:轉載
供稿:網友

本文實例講述了java基于線程池和反射機制實現定時任務的方法。分享給大家供大家參考,具體如下:

主要包括如下實現類:

1. Main類:

任務執行的入口:

調用main方法,開始加載任務配置并執行任務

package com.yanek.task; import java.util.List; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class Main {  /**   * @param args   */  public static void main(String[] args) {   ScheduledExecutorService scheduExec = Executors.newScheduledThreadPool(1);   /*   TaskModel tm=new TaskModel();   tm.setClassName("com.yanek.task.TaskA");   tm.setMethodName("testA");   tm.setInitialDelay(3);   tm.setPeriod(5);   */   List tasks=XmlReader.getTasks();   for (int i=0;i<tasks.size();i++)   {    TaskModel tm=(TaskModel)tasks.get(i);    scheduExec.scheduleAtFixedRate(new MyTask(tm),tm.getInitialDelay(), tm.getPeriod(), TimeUnit.SECONDS);   }  } }

2. MyTask 類 實現Runnable接口,在main類中調用

package com.yanek.task; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Date; public class MyTask implements Runnable {  private TaskModel taskModel;  public MyTask() {}  public MyTask(TaskModel tm) {   this.taskModel = tm;  }  public void run() {    System.out.println("call at " + (new Date()));    try {     Class<?> classType = Class.forName(taskModel.getClassName());     Method getMethod = classType.getMethod(taskModel.getMethodName());     getMethod.invoke(classType);    } catch (SecurityException e) {     e.printStackTrace();    } catch (IllegalArgumentException e) {     e.printStackTrace();    } catch (ClassNotFoundException e) {     e.printStackTrace();    } catch (NoSuchMethodException e) {     e.printStackTrace();    } catch (IllegalAccessException e) {     e.printStackTrace();    } catch (InvocationTargetException e) {     e.printStackTrace();    }  } }

3. TaskModel: 對任務類的封裝

package com.yanek.task; public class TaskModel {  public String getClassName() {   return className;  }  public void setClassName(String className) {   this.className = className;  }  public String getMethodName() {   return methodName;  }  public void setMethodName(String methodName) {   this.methodName = methodName;  }  public long getInitialDelay() {   return initialDelay;  }  public void setInitialDelay(long initialDelay) {   this.initialDelay = initialDelay;  }  public long getPeriod() {   return period;  }  public void setPeriod(long period) {   this.period = period;  }  private String className;  private String methodName;  private long initialDelay;  private long period; }

4. XmlReader 任務配置解析類

package com.yanek.task; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; public class XmlReader {  public static void main(String[] args) {   XmlReader.getTasks();  }  public static List getTasks() {   List tasks = new ArrayList();   System.out.println("load task config start...");   String path = "/work/TaskManager/conf/taskconfig.xml";   File file = new File(path);   if (file.exists() && !file.isDirectory()) {    try {     SAXBuilder sx = new SAXBuilder();     Document doc = sx.build(file);     Element rootelement = doc.getRootElement();      List<Element> childs = rootelement.getChildren();      for (int i = 0; i < childs.size(); i++) {       TaskModel tModel = new TaskModel();       tModel.setClassName(childs.get(i).getChildText("class"));       System.out.println(childs.get(i).getChildText("class"));       tModel.setMethodName(childs.get(i).getChildText("method"));       System.out.println(childs.get(i).getChildText("method"));       String initialDelay = childs.get(i).getChildText("initialDelay");       tModel.setInitialDelay((Long.valueOf(initialDelay)));       System.out.println("距離首次運行還差" + initialDelay + "秒!");       tModel.setPeriod(Integer.valueOf(childs.get(i).getChildText("period")));       System.out.println(childs.get(i).getChildText("period"));       tasks.add(tModel);     }    } catch (NumberFormatException e) {     // TODO Auto-generated catch block     e.printStackTrace();    } catch (JDOMException e) {     // TODO Auto-generated catch block     e.printStackTrace();    } catch (IOException e) {     // TODO Auto-generated catch block     e.printStackTrace();    }   } else {    System.out.println("file no exist!");   }   System.out.println("load task config end !");   return tasks;  } }

5. 配置文件:

<?xml version="1.0" encoding="UTF-8"?> <taskconfig>   <task>     <class>com.yanek.task.TaskA</class>     <method>testA</method>     <initialDelay>5</initialDelay>     <period>2</period>   </task>   <task>     <class>com.yanek.task.TaskB</class>     <method>testB</method>     <initialDelay>5</initialDelay>     <period>3</period>   </task>   <task>     <class>com.yanek.task.TaskC</class>     <method>testC</method>     <initialDelay>5</initialDelay>     <period>3</period>   </task> </taskconfig>

6. 測試任務類:

TaskA TaskB TaskC其中定義靜態方法 ,這些類的靜態方法配置在 xml文件中,被調用。

package com.yanek.task; public class TaskA {  /**   * @param args   */  public static void main(String[] args) {   System.out.println("task a test");  }  public static void testA()  {   System.out.println("taska testA method call!");  } } package com.yanek.task; public class TaskB {  /**   * @param args   */  public static void main(String[] args) {   System.out.println("task b test");  }  public static void testB()  {   System.out.println("TaskB testB method call!");  } } package com.yanek.task; public class TaskC {  /**   * @param args   */  public static void main(String[] args) {   System.out.println("task c test");  }  public static void testC()  {   System.out.println("Taskc testC method call!");  } } 

希望本文所述對大家Java程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新绛县| 衢州市| 贡嘎县| 文水县| 三原县| 庄浪县| 留坝县| 海阳市| 田东县| 江孜县| 杨浦区| 信宜市| 深圳市| 平江县| 密山市| 松江区| 合山市| 米林县| 上虞市| 上林县| 邯郸县| 从化市| 河源市| 子长县| 开远市| 新闻| 阿尔山市| 韩城市| 射洪县| 灵川县| 涟源市| 萍乡市| 甘泉县| 凤城市| 图木舒克市| 石屏县| 沙湾县| 寻甸| 馆陶县| 乐都县| 通州市|