[英]Do I need to create a DocumentBuilderFactory everytime?
我需要每 5 分鍾從 RSS 提要更新新聞提要。
我寫了一個 TimerTask 如下所示
public class TimerTaskForAllNews
{
public static void main( String[] args )
{
TimerTask task = new AllNewsUpdatrUtility();
Timer timer = new Timer();
timer.schedule(task, 1000,60000);
}
}
這是我的 TimerTask 實現類
package com.util;
import java.net.URL;
public class AllNewsUpdatrUtility extends TimerTask {
private static AllNewsUpdatrUtility instance = null;
public AllNewsUpdatrUtility() {}
public static AllNewsUpdatrUtility getInstance() {
if (instance == null)
instance = new AllNewsUpdatrUtility();
return instance;
}
@Override
public void run() {
try {
JSONArray latestnews = new JSONArray();
JSONObject jsonobj_allnews = new JSONObject();
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
URL url = new URL("http://www.rssmix.com/u/8160628/rss.xml");
Document doc = builder.parse(url.openStream());
NodeList items = doc.getElementsByTagName("item");
for (int i = 0; i < items.getLength(); i++) {
Element item = (Element) items.item(i);
String title = getValue(item, "title");
String link = getValue(item, "link");
String pub_date = getValue(item, "pubDate");
} // for loop ends here
} catch (Exception e) {
e.printStackTrace();
}
}
}
你能告訴我我可以改進這個程序嗎?
JSR 206 Java™ API for XML Processing (JAXP) 1.4規范說:
預計 SAXParserFactory 實現的 newSAXParser 方法、DocumentBuilderFactory 的 newDocumentBuilder 方法和 TransformerFactory 的 newTransformer 方法將是線程安全的,沒有副作用。
正如評論中所說,您可以緩存 DocumentBuilderFactory 實例:
package com.util;
import java.net.URL;
public class AllNewsUpdatrUtility extends TimerTask {
private static AllNewsUpdatrUtility instance;
private final DocumentBuilderFactory dbf;
private AllNewsUpdatrUtility() {}
public synchronized static AllNewsUpdatrUtility getInstance() {
if (instance == null)
instance = new AllNewsUpdatrUtility();
dbf = DocumentBuilderFactory.newInstance();
return instance;
}
@Override
public void run() {
try {
JSONArray latestnews = new JSONArray();
JSONObject jsonobj_allnews = new JSONObject();
DocumentBuilder builder = dbf.newDocumentBuilder();
URL url = new URL("http://www.rssmix.com/u/8160628/rss.xml");
Document doc = builder.parse(url.openStream());
NodeList items = doc.getElementsByTagName("item");
for (int i = 0; i < items.getLength(); i++) {
Element item = (Element) items.item(i);
String title = getValue(item, "title");
String link = getValue(item, "link");
String pub_date = getValue(item, "pubDate");
} // for loop ends here
} catch (Exception e) {
e.printStackTrace();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.