调用相同 class 的两个并发主电源是否会影响其自身的静态变量?

Does invoking two concurrent mains of the same class influence its own static variables?

我正在构建一个 HTTP 服务器 (link) 并且我正在使用

 Executors.newCachedThreadPool() 

回答我的请求。解决此类请求的处理程序运行以下代码:

  IntFactorization.main(input);

其中 IntFactorization 是一种检测 class,因此我必须强制使用 main 方法。检测 class 将所有这些方法和属性都设为静态。它的方法也是同步的。

IntFactorization的主要内容是这样的:

public static void main(String[] args) {

IntFactorization obj = new IntFactorization();

int i = 0;



System.out.println("Factoring " + args[0] + "...");

ArrayList<BigInteger> factors = 

  obj.calcPrimeFactors(new BigInteger(args[0]));

System.out.println("");

System.out.print("The prime factors of " + args[0] + " are ");



for (BigInteger bi: factors) {

  i++;

  System.out.print(bi.toString());

  if (i == factors.size()) {

    System.out.println(".");

  } else {

    System.out.print(", ");

  }

}





System.out.println("");

}

我的服务器必须同时响应多个请求,因为我们将服务器执行器设置为

 Executors.newCachedThreadPool();

然而,分析结果我发现对于同一个数字,其因式分解的结果并不总是相同的。 我认为这可能是(但我想让您确认)代码使用静态变量进行检测的事实意味着如果服务器运行两个执行程序,那么线程会相互影响吗?

我不明白"instrumentation class",但你的问题的标题很有趣。

Does invoking two concurrent mains of the same class influence its own static variables?

Java 语言中的 public static void main(String[] args) 方法没有什么特别之处。

如果您在 JVM 命令行上给出其 class 的名称,那么标准 JVM 将调用具有该名称和参数签名的方法,但这就是 JVM .那不是 Java.

除了 main(...) 可用作应用程序的入口点外,它与任何其他静态方法一样。它将 "influence" 其 class(或任何其他 class)的静态变量,如果这是它被编写的目的。如果两个或多个线程同时对 main() 进行重叠调用,这就像两个或多个线程同时对 any 方法进行重叠调用一样。