2014-03-02 56 views
1

我正在構建我的第一個maven插件,並針對maven 3.我試圖理解實例化策略如何發揮線程安全性。如果我保留默認的「每查找」策略,那是什麼意思?對我來說,這意味着插件的每次執行都會實例化一個新的mojo,這使得編寫一個非線程安全的插件幾乎是不可能的。Maven線程安全插件陷阱

如果我選擇「singleton」策略,我可以看到線程安全問題是如何出現的,因爲同一個mojo可能同時在不同的線程中使用,導致通常的線程安全問題(即類級變量)發揮作用。

總之,每個查找實例化策略是否像我想的那樣工作?什麼是一些通用的經驗法則/指導方針,以確保maven 3插件實際上是線程安全的(並且不僅在@Mojo註釋中標記爲線程安全)?

回答

0

你是對的,per-lookup意味着一個新的實例是爲叢中的每個查找而創建的。每次執行都會導致查找,所以是的,每次執行都會創建一個新實例。

這是防止多線程問題的最安全的方法。

但是,您仍然可以通過使用非最終靜態字段來創建多線程問題。

所以,使用per-lookup並且不要使用靜態變量,並且您是安全的。

+0

啊,我沒在想靜態變量。如果可能的話,我會避免它們(除非它們當然是最終的)。謝謝! – jasonf