Java 是否可以通过多个对象实例同时访问类的静态方法?

Java 是否可以通过多个对象实例同时访问类的静态方法?,java,Java,例如: ThisClass.staticMethod(Object... parameters); 将由其他对象的多个实例同时访问 当其他对象同时使用相同的静态方法时,它们是否会依赖于该类?显然,该方法的所有用户都依赖于该类,如果这是您的意思的话 此外,如果它们真的同时调用该方法(即从多个线程调用),则可能会出现并发问题,这取决于该方法实际执行的操作。向我们展示代码,我们可能会讲得更多。由多个线程并发运行的代码片段有可能导致错误,无论该代码放置在何处(静态/非静态方法) 您必须确保由代码操纵的

例如:

ThisClass.staticMethod(Object... parameters);
将由其他对象的多个实例同时访问


当其他对象同时使用相同的静态方法时,它们是否会依赖于该类?

显然,该方法的所有用户都依赖于该类,如果这是您的意思的话


此外,如果它们真的同时调用该方法(即从多个线程调用),则可能会出现并发问题,这取决于该方法实际执行的操作。向我们展示代码,我们可能会讲得更多。

由多个线程并发运行的代码片段有可能导致错误,无论该代码放置在何处(静态/非静态方法)


您必须确保由代码操纵的数据允许并发访问,并在需要时正确同步代码。

所有调用静态方法的对象都将依赖于类方法,但它们之间没有依赖关系。如果您的静态方法可能会被来自不同线程的对象调用,则需要确保您的静态方法是线程安全的,即。,您需要使用锁定来确保一次只有一个线程访问任何非堆栈内存。

仅当该方法使用静态对象或参数由其他实例共享时

示例:Math.max(inta,intb)是一个静态方法,但不使用任何静态对象,因此不存在依赖关系

示例2:这里所有调用共享相同的结果变量,对staticMethod的两个并行调用可能会导致错误的结果

private static int result = 0;
private static int staticMethod(Object... args)
{
      result = args.length;
      //Do Something
      return result;
}
示例3:这个是线程安全的。如果没有共享任何参数,则每个调用都有自己的结果实例

private static int staticMethod(Object... args)
{
    int result = 0;
    result = args.length;
    //Do something
    return result;
}
示例4:这将类用作锁,以防止并行访问类函数。只有一个对staticMethod的调用执行所有其他等待

private static int result = 0;
private static synchronized int staticMethod(Object... args)
{
      result = args.length;
      //Do Something
      return result;
}

哦,所以我只需要保护非堆栈内存对象,如果我创建了一个类似于Math类中的静态方法,并且对象将同时访问它们,那么这有可能吗?@richev-我希望Math类中的静态方法不会访问任何将要更改的共享信息;如果简单地使用静态查找表和本地数据。如果您的方法类似,那么它们可能已经是线程安全的。通常,如果方法使用的共享信息可能会更改或更改其他线程可能使用的信息,那么您需要注意保护这些代码部分,以便在该部分中的每个线程的信息保持一致。“仅当方法使用静态对象时”-我理解您在这里的意思,但你的措辞不准确。我可以很容易地编写一个非线程安全的方法,尽管它不使用任何静态对象(只使用非线程安全的单例:-)。我认为“静态和/或全局”是一个更精确的术语。