我正在构建一个HTTP服务器(link),而我正在使用
Executors.newCachedThreadPool()
以满足我的要求。解决此类请求的处理程序运行以下代码:
IntFactorization.main(input);
其中IntFactorization是一个检测类,我必须强制使用main方法。 instrumentation类将所有这些方法和属性都作为静态。它的方法也是同步的。
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();
然而,分析结果我注意到,对于相同的数字,其分解的结果并不总是相同的。 我认为它可能是(但我想让你确认)代码被静态变量监控的事实意味着如果服务器运行两个执行器,那么线程会相互影响?
答案 0 :(得分:0)
我对“仪器课”的理解并不了解,但问题的标题很有意思。
Does invoking two concurrent mains of the same class influence its own static variables?
Java语言中的public static void main(String[] args)
方法没有什么特别之处。
如果在JVM命令行上给出其类的名称,那么标准 JVM 将使用该名称和参数签名调用该方法,但这是JVM。那不是Java。
除了main(...)
可用作应用程序的入口点之外,它就像任何其他静态方法一样。它将“影响”其类(或任何其他类)的静态变量,如果这是它所写的内容。如果两个或多个线程同时对main()
进行重叠调用,那就像两个或多个线程同时重复调用任何方法一样。