天天看點

在多線程中使用靜态方法是否有線程安全問題

   類的成員分為兩類,靜态成員(static member)和執行個體成員(instance member)。靜态成員屬于類,執行個體成員則屬于對象,即類的執行個體。

    簡單讨論一下在一個類中使用靜态字段(static field)和靜态方法(static method)是否會有線程安全問題。 

    我們在知道, 靜态字段(static field)和靜态方法(static method)的調用是通過類來調用。靜态方法不對特定的執行個體操作,隻能通路靜态成員。執行個體方法可對特定的執行個體操作,既能通路靜态成員,也能通路執行個體成員。

    那麼,在多線程中使用靜态方法是否有線程安全問題?這要看靜态方法是是引起線程安全問題要看在靜态方法中是否使用了靜态成員。

    因為,在多線程中使用同一個靜态方法時,每個線程使用各自的執行個體字段(instance field)的副本,而共享一個靜态字段(static field)。是以說,如果該靜态方法不去操作一個靜态成員,隻在方法内部使用執行個體字段(instance field),不會引起安全性問題。但是,如果該靜态方法操作了一個靜态字段,則需要靜态方法中采用互斥通路的方式進行安全處理。

<a href="http://blog.csdn.net/scucj/article/details/1394523">http://blog.csdn.net/scucj/article/details/1394523</a>

繼續閱讀