2013-03-11 133 views
1

我有疑問。
假設在多線程環境中,10K個用戶同時使用一個站點,並且該站點有一個靜態方法。
如果JAVA中的靜態方法創建單個實例,那麼第10k用戶需要等待該方法,直到剩餘的用戶完成其使用。
對嗎?
任何人都可以請解釋嗎?在JAVA中是靜態方法創建單個實例嗎?

回答

6

如果JAVA中的靜態方法創建單個實例,則第10K個用戶需要等待該方法,直到剩餘的usres完成用法。

調用靜態方法不會隱式創建一個實例。你可以這樣做的方法,當然 - 但你不必這樣做。

創建實例也不需要鎖 - 儘管如此,您可以根據需要添加同步。

因此,在不需要對共享數據進行任何同步訪問的簡單靜態方法的情況下,多個線程同時調用該方法應該沒有問題。

0

NO.10K用戶不需要等待該方法,直到剩餘的使用完成使用。

因爲它不是靜態的方法不同步...所以多個線程可以訪問同一個對象。

2

我想你的意思是像單身人士或工廠,例如

public class X { 

    public static X getInstance() { 
     return new X(); 
    } 

    private X() {} 
} 

然後這一切都取決於你在靜態方法上做了什麼。如果該方法不關心線程(如上例),那麼它不應該被同步並且可以被同時執行,然後你錯了,因爲可以同時執行X.getInstance()並且10Kth不必等待以前完成。

如果方法不能是多線程的,它應該是同步的(整個方法或其中的一部分),那麼是的,你是對的。