亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Java程序的臟數據問題處理

2019-11-18 13:07:51
字體:
來源:轉載
供稿:網友

  臟數據(Out-of-date data),指過時的數據。
  
  假如在您的java程序中存在臟數據,將或多或少地給軟件系統帶來一些問題,如:無法實時地應用已經發生改變的配置,軟件系統出現一些莫名其妙的、難以重現的、后果嚴重的錯誤等等。盡量避免臟數據的存在是非常有價值的。本文希望能在這方面給同行們一點幫助。
  
  Fragment 1. 緩存技術的臟數據問題
  
  /**
  * A report PRinter is used to print a report.
  *
  * @version 1.0 9/9/2003
  * @author Bill
  */
  public class ReportPrinter {
  /**
  * ConstrUCts a <code>ReportPrinter</code> instance.
  */
  public ReportPrinter() {
  // do something...
  }
  
  /**
  * Prints a printable.
  *
  * @param printable the specified printable object
  */
  public void print(Printable printable) {
  Graphics g = getGraphics();
  g.setFont(getReportFont(printable.getFont());
  
  printable.print(g);
  }
  
  /**
  * Returns the corresponding report font of a java font.
  *
  * @param javaFont the specified java font
  * @return the corresponding report font
  */
  private Font getReportFont(font javaFont) {
  Font reportFont = fontMap.get(javaFont);
  
  if(reportFont == null) {
  reportFont = loadFont(javaFont);
  fontMap.put(javaFont, reportFont);
  }
  
  return reportFont;
  }
  
  /**
  * Loads the corresponding report font of a java font.
  *
  * @param javaFont the specified java font
  * @param the corresponding report font
  */
  protected static Font loadFont(Font javaFont) {
  Font reportFont = null;
  
  // do something...
  
  return reportFont;
  }
  
  /**
  * The font map(java font->report font).
  */
  private static HashMap fontMap = new HashMap();
  }
  
  Fragment 1中,由于裝載一個java font所對應的report font開銷較大,使用了緩存技術來避免這種開銷。這是一種常見的提高性能的方式,而且在一般情況下運行良好。但是Fragment 1的設計與實現可能是不完備的,因為極有可能一個java font所對應的report font在系統啟動之后發生變化,在這種變化發生之后,只有重啟軟件系統才能裝載之,這經常是最終用戶的抱怨之一。更可怕的是,類似的這種臟數據的存在還可能帶來其它嚴重的、無法想象的后果。
  
  如何避免使用緩存技術所帶來的臟數據問題呢?
  
  在設計、實現和測試時,應該清楚定義緩存數據的更新:
  i. 不考慮緩存數據的更新,重啟軟件系統是一種必要的方式;
  ii. 不考慮緩存數據的更新,緩存數據不可能成為臟數據(但在軟件系統中,往往“不可能”會在一次又一次的重構之后變為“可能”);
  iii. 考慮緩存數據的更新,當源數據變化時,實時更新緩存數據。
  
  Fragment 2. Singleton模式的臟數據問題
  
  /**
  * A storage usage handler is used to query the storage usage of users.
  *
  * @version 1.0 9/9/2003
  * @author Bill
  */
  public class StorageUsageHandler {
  /**
  * Returns a <code>StorageUsageHandler</code> instance.
  *
  * @return the single <code>StorageUsageHandler</code> instance
  */
  public static StorageUsageHandler getStorageUsageHandler() {
  if(handler == null) {
  handler = new StorageUsageHandler();
  }
  
  return handler;
  }
  
  /**
  * Constructs a <code>StorageUsageHandler</code> instance.
  */
  private StorageUsageHandler() {
  users = Context.getAllUsers();
  }
  
  /**
  * Returns the storage sizes of all the users.
  *
  * @return the storage sizes
  */
  public long[] getSizes() {
  long sizes[] = new long[users.size()];
  
  for(int i = 0; i < users.size(); i++) {
  sizes[i] = getOneSize(users.get(i));
  }
  }
  
  /**
  * Returns the storage size of a user.
  *
  * @param user the specified user
  * @return the storage size
  */
  protected long getSize(User user) {
  // do something...
  
  return 0;
  }
  
  /**
  * The <code>StorageUsageHandler</code> singleton.
  */
  private static StorageUsageHandler handler;
  
  /**
  * The users.
  */
  private List users;
  }
  
  您看出了問題所在嗎?
  
  Fragment 2中,由于沒有必要次次實例化StorageUsageHandler而帶來不必要的開銷,采用了Singleton模式以保證StorageUsageHandler只被實例化一次。
  
  在實例化SotrageUsageHandler時,StorageUsageHandler的類成員users將被賦值。由于不存在任何對users重新賦值的方法,一直駐留在軟件系統中的users將不會發生任何變化。在軟件系統啟動之后,增加、刪除或修改用戶的操作經常會發生,而一旦發生這類操作,users就成為了臟數據,Fragment 2將無法正常工作。
  
  如何避免使用Singleton模式所帶來的臟數據問題呢?
  
  對于Singleton類的類成員:
  i. 對于與Singleton類外部無依靠關系的類成員,不存在這種問題;
  ii. 對于依靠于Singleton類外部的類成員,且該類成員不存在更新機制,最好是將其去掉,需要時從Singleton類外部直接獲取;假如這種辦法不可行,應提供機制以確保在使用該類成員之前,該類成員已經被更新過。
  
  Fragment 3. 類使用的臟數據問題
  
  /**
  * A storage usage handler is used to query the storage usage of users.
  *
  * @version 1.0 9/9/2003
  * @author Bill
  */
  public class StorageUsageHandler implements AdminHandler {
  /**
  * Constructs a <code>StorageUsageHandler</code> instance.
  */
  private StorageUsageHandler() {
  users = Context.getAllUsers();
  }
  
  /**
  * Returns the storage sizes of all users.
  *
  * @return the storage sizes
  */
  public long[] getSizes() {
  long sizes[] = new long[users.size()];
  
  for(int i = 0; i < users.size(); i++) {
  sizes[i] = getOneSize(users.get(i));
  }
  }
  
  /**
  * Returns the storage size of a user.
  *
  * @param user the specified user
  * @return the storage size
  */
  protected long getSize(User user) {
  // do something...
  
  return 0;
  }
  
  /**
  * Displays the storage usage of users.
  *
  * @param req the http servlet request
  * @param res the http servlet response
  *
  * @throws IOException
  * @throws ServletException
  */
  public void process(HttpServletRequest req, HttpServletResponse res)
  throws IOException, ServletException {
  
  res.setContentType("text/Html");
  res.setHeader("Cache-Control", "no-cache");
  res.setHeader("Pragma","no-cache");
  res.setDateHeader("EXPires", 0);
  
  PrintWriter writer = new PrintWriter(res.getOutputStream());
  long sizes[] = getsizes();
  writer.println("<html><title>Storage Usage</title><body>");
  writer.println("<table width='100%'>");
  
  for(int i = 0; i < sizes.length; i++) {
  writer.print("<tr><td align='center' nowrap>");
  writer.print(users.get(i) + ": " + sizes[i]);
  writer.println("</td></tr>");
  }
  
  writer.println("</body></html>");
  writer.flush();
  writer.close();
  }
  
  /**
  * The users.
  */
  private List users;
  }
  
  /**
  * An admin servlet as a http servlet to process the admin http servlet
  * request and response.
  *
  * @version 1.0 9/9/2003
  * @author Bill
  */
  public class AdminServlet extends HttpServlet {
  /**
  * Initiates the configuration.
  *
  * @param config the servlet config
  *
  * @throws ServletException
  */
  private void initConfig(ServletConfig config) throws ServletException {
  // do somet

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩中文字幕免费看| 欧美激情久久久久| 亚洲亚裔videos黑人hd| 日韩av影院在线观看| 日韩欧美精品在线观看| 欧美日韩中文在线| 中文字幕欧美日韩精品| 欧美精品在线播放| 久久免费少妇高潮久久精品99| 97激碰免费视频| 精品福利免费观看| 亚洲欧美色婷婷| 成人免费在线视频网址| 欧美性猛交xxxx免费看久久久| 亚洲欧洲自拍偷拍| 亚洲成人精品在线| 免费av在线一区| 亚洲最新av在线网站| 欧美激情视频网址| 日本精品视频在线播放| 45www国产精品网站| 夜夜嗨av色综合久久久综合网| 成人444kkkk在线观看| 精品久久久久久久久久ntr影视| 黑人精品xxx一区一二区| 在线日韩欧美视频| 97超级碰碰碰| 国产欧美va欧美va香蕉在线| 欧美精品久久久久久久久久| 亚洲欧美日韩一区在线| 中文字幕亚洲图片| 国产精品色悠悠| 在线精品视频视频中文字幕| 国产精品成人观看视频国产奇米| 日韩精品免费看| 操91在线视频| 成人国产精品色哟哟| 亚洲国产欧美一区二区三区久久| 久久久久久久久久久av| 欧美成人全部免费| 亚洲香蕉成人av网站在线观看| 在线视频日本亚洲性| 欧美成人精品一区二区三区| 久久在线观看视频| 日本不卡视频在线播放| 午夜精品久久久久久99热软件| 亚洲国产一区二区三区在线观看| 国产盗摄xxxx视频xxx69| 国产日韩欧美综合| 中文字幕精品国产| 亚洲精品大尺度| 精品亚洲一区二区三区四区五区| 国产视频综合在线| 久国内精品在线| 日韩女在线观看| 成人午夜在线视频一区| 久久久精品2019中文字幕神马| 日本三级韩国三级久久| 韩剧1988免费观看全集| 亚洲图片欧美午夜| 中文字幕日韩视频| 最近中文字幕2019免费| 国产精品久久77777| 久久亚洲精品视频| 麻豆国产va免费精品高清在线| 久久露脸国产精品| 黑人巨大精品欧美一区二区三区| 亚洲激情成人网| 国内精品久久久久影院 日本资源| 国产成人av在线| 久久99精品久久久久久青青91| 成人黄色生活片| 日韩av电影国产| 欧美激情精品久久久久久黑人| 国产精品偷伦免费视频观看的| 亚洲第一中文字幕在线观看| 奇门遁甲1982国语版免费观看高清| 欧美成人高清视频| 国产精品视频26uuu| 国产精品久久久一区| 激情av一区二区| 久久久免费精品视频| 主播福利视频一区| 不用播放器成人网| 国产午夜精品美女视频明星a级| 久久99久久99精品中文字幕| 亚洲欧美国产日韩中文字幕| 在线国产精品视频| 国产亚洲精品综合一区91| 亚洲视频第一页| 久久亚洲精品国产亚洲老地址| 亚洲精品久久久久中文字幕欢迎你| 欧美大片网站在线观看| 在线观看91久久久久久| 久久国产色av| 97在线视频精品| 国产精品色视频| 色婷婷亚洲mv天堂mv在影片| 亚洲v日韩v综合v精品v| 精品视频www| 亚洲欧美日韩精品久久奇米色影视| 欧美不卡视频一区发布| 国产一区二区三区丝袜| 欧日韩不卡在线视频| 国产日韩欧美在线看| 亚洲free性xxxx护士白浆| 亚洲桃花岛网站| 九九热最新视频//这里只有精品| 欧美在线精品免播放器视频| 精品国产一区二区三区在线观看| 久久精品影视伊人网| 国产精品精品久久久| 久久久久久成人| 亚洲高清久久久久久| 亚洲欧美综合精品久久成人| 91精品视频免费观看| 色偷偷偷亚洲综合网另类| 91麻豆国产精品| 精品久久久久人成| 麻豆国产精品va在线观看不卡| 久久av在线看| 国产精品美女久久久免费| 亚洲精品www久久久久久广东| 一本色道久久综合狠狠躁篇的优点| 久久99青青精品免费观看| 亚洲一区二区国产| 亚洲第一天堂av| 色老头一区二区三区| 国产精品久久久一区| 国产精品成av人在线视午夜片| 成人黄在线观看| 国产视频在线一区二区| 91精品国产高清自在线| 日韩中文字幕不卡视频| 欧美中文字幕在线视频| 国产视频欧美视频| 欧美孕妇与黑人孕交| 亚洲网站在线播放| 91亚洲国产精品| 日韩av网站电影| 欧美一区二区三区四区在线| 国产精品久久久久久久久| 色yeye香蕉凹凸一区二区av| 中文字幕视频在线免费欧美日韩综合在线看| 欧亚精品在线观看| 国产精品99久久久久久www| 最新国产成人av网站网址麻豆| 欧美在线视频一区二区| 精品国偷自产在线视频99| 91理论片午午论夜理片久久| 色一区av在线| 亚洲福利视频网站| 红桃av永久久久| 亚洲精品中文字幕女同| 国产精品一久久香蕉国产线看观看| 欧美国产日韩二区| 日韩天堂在线视频| 国产精品毛片a∨一区二区三区|国| 国产精品美乳在线观看| 国产精品中文久久久久久久| 国产这里只有精品| 大量国产精品视频| 久久精品成人一区二区三区| 91久久在线观看|