调用同一个类的两个并发主电源会影响它自己的静态变量吗?

时间:2016-05-13 17:50:22

标签: java multithreading static httpserver executor

我正在构建一个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();

然而,分析结果我注意到,对于相同的数字,其分解的结果并不总是相同的。 我认为它可能是(但我想让你确认)代码被静态变量监控的事实意味着如果服务器运行两个执行器,那么线程会相互影响?

1 个答案:

答案 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()进行重叠调用,那就像两个或多个线程同时重复调用任何方法一样。