多例模式和資料統計

2021-08-24 19:24:48 字數 2035 閱讀 3942

我們知道單例模式是多例模式的乙個特例,在多例模式中多例類管理著自己的多個例項,自己初始化自己的例項並且向外界提供自己的例項。而且多例類 必須自己初始化自己,外界無法通過呼叫多例類的建構函式例項化乙個多例類。

既然對多例模式有了乙個大概的理解,那麼現在就來看下多例類在乙個具體的環境下的使用。

下面我們考慮乙個統計資料的案例,在乙個系統中,資料庫中儲存的資料量很大,資料每月都會以一定的速度增加,現在要的是針對每個月做一次統計,也就是現在 是9月份,那麼8月份的統計在以後都會不變,但是如果我們現在要看9月份的統計,那應該是會變得也就是在9月份你今天看到的9月份的統計資料和明天看到的 統計資料時不一樣的。這樣我們第一次想到的可能就是當每次查詢到來的時候我們通過sql語句進行一次統計,我們虎發現的是這樣做每次的統計花費的時間(幾 十秒)是難以忍受的,那麼有沒有什麼好的辦法了。

辦法是要的就是把統計資料快取起來,比如說把統計資料儲存到乙個檔案中比如xml檔案,那麼下次請求到來的時候我們只要把xml中儲存的資料返回給使用者就可以啦。

現在的問題又要啦,既然是儲存在乙個檔案中,那麼什麼時候生成這個檔案,什麼時候跟新這個檔案了。哦,可能很簡單那就是每次請求過來的時候如果檔案不存在 就生成,如果過時來就跟新,但是我們先在來具體考慮下會發生什麼。假設在xx時間有5個請求如果這個時候要生成這個檔案那麼也就是同時有5個執行緒在試圖生 成這個檔案,這個時候會發生什麼我們是無法保證的。那麼有沒有什麼好的方法來保證了。

現在我們來看把多例模式變化下,應用到這個環境中來。我們要求得是,當請求到來的時候,我們檢查是否要跟新檔案或者生成檔案,如果要那麼我們繼續檢查是否 已經有執行緒在跟新這個檔案如果要我們只要把當前的請求執行緒放到等待佇列中就可以啦,如果沒有那麼我們就生成這樣的乙個跟新執行緒並且把當前請求執行緒放在這個 執行緒的等待佇列中。下面我們來看下具體**的實現。

我們定義乙個介面:

public inte***ce inotify

這個介面用來當更新執行緒完成後用來喚醒等待執行緒。

另乙個介面用來把當前請求執行緒加入到等待佇列中:

public inte***ce iwaitingaction extends runnable

現在我們來實現這個變種的例項類。

public class topbookservice implements iwaitingaction 

private static mapmap = new hashmap();

public static synchronized topbookservice getinstance(string key)

topbookservice service = new topbookservice(key);

new thread(service).start();

return service;

}public synchronized void addnotifyobject(inotify notify)

list.add(notify);

}public void run() }}

}

線面我們來看具體的action中做了些什麼:

public class booktopaction extends baseaction implements inotify 

protected void initresult() catch (interruptedexception e) }}

//解析檔案並且生成返回結果

}/**

* 跟新排行榜上前十的書本的xml檔案

** @return

* @param filename 被更新的檔名

*/protected synchronized void updatexmlfile(string filename)

protected boolean needupdate(string filename)

public void finished(boolean flag)

}

中位數和資料統計

摘要 1 基本概念 順序統計量 在乙個由n個元素組成的集合中,第i個順序統計量是值該集合中第i小的元素。例如最小值是第1個順序統計量,最大值是第n個順序統計量。中位數 一般來說,中位數是指它所在集合的 中間元素 當n為奇數時,中位數是唯一的,出現位置為n 2 當n為偶數時候,存在兩個中位數,位置分別...

資料統計頁面

麵包屑導航區 class el icon arrow right 首頁 el breadcrumb item 資料統計 el breadcrumb item 資料包表 el breadcrumb item el breadcrumb 卡片檢視區域 為echarts準備乙個具備大小 寬高 的dom m...

tensorflow資料統計

本篇內容包括,tf.norm 張量的範數 tf.reduce min max 最大最小值 tf.argmax argmin 最大最小值的位置 tf.equal 張量的比較 tf.unique 張量的獨特值 1.tf.norm 二範數 x 2 xk 2 1 2 一範數 x 1 xk 無窮範數 x ma...