2016-09-16 12 views
3

我知道組​​件和系統(雖然還沒有使用它們),但我想知道如何初始化資源,當init方法可以從任何線程運行。假設我們有10個線程,並且它們都使用數據庫,線程可以按任意順序啓動。在這種情況下,我如何初始化數據庫連接池?什麼是正確的方式來初始化Clojure中的多線程程序中的資源

我目前使用比較和設置來做到這一點,但不知何故,它感覺不對。 這就是我所做的。我不知道什麼時候vm開始,當我的線程開始時(我正在使用風暴,db pool在一些螺栓中被初始化)。有一個更好的方法嗎?

+1

你提到的組件和系統,你也可以看看[mount](https://github.com/tolitius/mount)以獲得更自然的clojure感覺。 – Shlomi

+0

看起來很酷@Shlomi,會檢查出來 – Ravi

回答

3

您想使用locking函數。它類似於Java中的​​。

請點擊這裏查看完整的文檔:http://clojuredocs.org/clojure.core/locking

你那麼代碼將類似於:

(def datasource (atom)) 
(locking datasource 
    (when (nil? @datasource)) 
    (reset! datasource (make-datasource datasource-options)))) 

注意,你並不真正需要的原子內部的地圖。

+0

看起來好多了。謝謝! – Ravi

相關問題