簡體   English   中英

JAVA中的靜態方法是否創建單個實例?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM