繁体   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