[英]Is static method in JAVA creates a single instance?
我有個疑問。
假設在多線程環境中,有10K用戶同時使用一個站點,並且該站點具有靜態方法。
如果JAVA中的靜態方法創建了一個實例,則第1萬名用戶需要等待該方法,直到其余用戶完成其用法為止。
我對嗎?
有人可以解釋嗎?
如果JAVA中的靜態方法創建了一個實例,則第10K用戶需要等待該方法,直到其余用戶完成該用法為止。
調用靜態方法不會隱式創建實例。 當然,您可以在方法中執行此操作-不必這樣做。
創建實例也不需要鎖-盡管同樣,您可以根據需要添加同步。
因此,在不需要任何同步訪問共享數據的簡單靜態方法的情況下,多個線程同時調用該方法應該沒有問題。
我猜你的意思是像單身漢或工廠之類的東西,例如
public class X {
public static X getInstance() {
return new X();
}
private X() {}
}
然后,這完全取決於您對靜態方法執行的操作。 如果該方法不關心線程(如上面的示例中所示),則該方法不應同步並且可以並發執行,那么您就錯了,因為可以同時執行X.getInstance()
並且可以成功執行X.getInstance()
。不必等待之前完成。
如果該方法不能是多線程的,則應將其同步(整個方法或部分方法),然后是的,您是對的。
第.10K用戶無需等待該方法,直到其余用戶完成該方法的使用為止。
因為它不是靜態方法,所以不同步...所以多個線程可以訪問同一對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.