Java 類方法與其執行緒安全
阿新 • • 發佈:2019-02-07
類方法又叫靜態方法, 例項方法又叫非靜態方法。
1、類方法是屬於整個類,而不屬於某個物件。
2、類方法只能訪問類成員變數,不能訪問例項變數,而例項方法可以訪問類成員變數和例項變數。
3、類方法的呼叫可以通過類名.類方法和物件.類方法,而例項方法只能通過物件.例項方法訪問。
4、類方法只能訪問類方法,而例項方法可以訪問類方法和例項方法。
5、類方法不能被覆蓋,例項方法可以被覆蓋。
程式碼示例
class ABC{
public static void testStatic(){System.out.println("This is static method");}
public void testMethod(){System.out.println("This is instance method");}
public static void main(String[] str){
ABC.testStatic();//直接通過類呼叫
ABC a = new ABC();//例項化
a.testMethod();
}
}
靜態欄位(static field)和靜態方法(static method)的呼叫是通過類來呼叫的。靜態方法不對特定例項操作,只能訪問靜態成員。例項方法可對特定的例項操作,既能訪問靜態成員,也能訪問例項成員。
那麼,在多執行緒中使用靜態方法是否有執行緒安全問題?
靜態方法是否引起執行緒安全問題要看在靜態方法中是否使用了靜態成員。
因為,在多執行緒中使用同一個靜態方法時,每個執行緒使用各自的例項欄位(instance field)的副本,而共享一個靜態欄位(static field)。所以說,如果該靜態方法不去操作一個靜態成員,只在方法內部使用例項欄位(instance field - 區域性變數),不會引起安全性問題。但是,如果該靜態方法操作了一個靜態欄位,則需要靜態方法中採用互斥訪問的方式進行安全處理。