我建立一個HTTP服務器(link),我使用是否調用同一類的兩個併發的主幹影響它自己的靜態變量?
Executors.newCachedThreadPool()
到awswer我的請求。解析此類請求的處理程序運行下面的代碼:
IntFactorization.main(input);
其中IntFactorization是這種方式的儀表類,我必須強制使用的主要方法。 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("");
}
我的服務器必須同時awswer多個請求,併爲我們設置服務器執行人
Executors.newCachedThreadPool();
然而,分析結果我注意到了,相同的數字,其因式分解的結果並不總是相同的。 我認爲這可能是(但我希望你確認一下)代碼被靜態變量處理的事實意味着如果一個服務器運行兩個執行程序,那麼這些線程就會相互影響?
我看不到在此代碼中使用的靜態變量。 – RealSkeptic
@RealSkeptic此代碼是原始的非儀器化代碼。靜態變量由instrumentation類添加,同時調用syncronized靜態方法。 – user2934164
類中只有一個「static」變量實例。所以如果兩個不同的線程訪問一個靜態變量(拋開線程問題),它們會相互影響。這可能是也可能不是所期望的。如果有人想要例如計算創建的線程數,那麼靜態變量將會很有用。如果每個實例化對象都需要自己的測量變量,那麼靜態計數器可能不合適。 – KevinO