原文出處:http://www.cnblogs.com/tiancai/p/5417767.htmlhtml
另一篇描述:https://zhidao.baidu.com/question/394984299357804085.html數據庫
類的成員分爲兩類,靜態成員(static member)和實例成員(instance member)。靜態成員屬於類,實例成員則屬於對象,即類的實例。安全
簡單討論一下在一個類中使用靜態字段(static field)和靜態方法(static method)是否會有線程安全問題。 服務器
咱們在知道, 靜態字段(static field)和靜態方法(static method)的調用是經過類來調用。靜態方法不對特定的實例操做,只能訪問靜態成員。實例方法可對特定的實例操做,既能訪問靜態成員,也能訪問實例成員。多線程
那麼,在多線程中使用靜態方法是否有線程安全問題?這要看靜態方法是否引發線程安全問題,要看在靜態方法中是否使用了靜態成員。
由於,在多線程中使用同一個靜態方法時,每一個線程使用各自的實例字段(instance field)的副本,而共享一個靜態字段(static field)。因此說,若是該靜態方法不去操做一個靜態成員,只在方法內部使用實例字段(instance field),不會引發安全性問題。可是,若是該靜態方法操做了一個靜態字段,則須要靜態方法中採用互斥訪問的方式進行安全處理。
舉個簡單的例子,咱們使用的Console.WriteLine();中WriteLine()是Console類的靜態方法。
對於ASP.NET, 多個客戶端訪問服務器端, 這是一個多線程的例子.只要理解了緣由,咱們能夠在三層架構中的數據訪問層中放心使用靜態方法(static method)來訪問數據庫.架構