安全我用它這種設計模式在J2EE:保證線程在J2EE
public class myClass{
private static Hashtable<Integer, ContentClass> contents = new Hashtable<Integer, ContentClass>();
public synchronized static void m1(){
//some work on contents
}
public synchronized static void m2(){
//another some work on contents
}
我想在運行glassfish
3服務器部署此。
測驗1:它是保證線程安全嗎?
測驗2:如果類更改爲有狀態EJB發生了什麼?它是線程安全的嗎?
不僅它是*不是線程安全的,而且每個服務器的Hashtable內容也會不同。不僅每臺服務器作爲一臺物理/虛擬機,而且每臺JVM - 這意味着即使應用程序運行在同一臺「機器」上但在不同的服務器實例上運行,也不會有(a)沒有線程安全保證和(b)內容'會有所不同。您可能需要查看分佈式緩存解決方案(例如Ehcache,Hazelcast,Infinispan)。 –
@NikosParaskevopoulos謝謝。如果你認爲這個程序只運行在一個jvm上會發生什麼情況?分佈式緩存解決方案不會自動放入glassfish中? – DanialAbdi