マルチスレッド(Executorフレームワーク)では、x()メソッド内のすべてのタイムプリントの合計が、doPerformによってプリントされた合計時間と一致しません。そして、この違いは、スレッドプール内のスレッド数が増えるにつれて大きくなり続けます(最大20秒になります)。誰かが理由を理解できますか?そして、xメソッドから戻るのにかかる時間を短縮する方法はありますか?
私はそれを次のようにテストしました:
a)エグゼキュータへの500件の提出(poolsize = 100)
b)エグゼキュータへの500件の提出(poolsize = 300)
c)エグゼキュータへの300件の提出(poolsize = 100)
public void x() {
long startTime = System.currentTimeMillis();
for (long l = 0; l <= 10000000; l++) {
if (l % 1000000 == 0) {
System.out.println("Thread id: "
+ Thread.currentThread().getId() + "\t"
+ (System.currentTimeMillis() - startTime));
startTime = System.currentTimeMillis();
}
}
}
public void doPerform() {
long startTime = System.currentTimeMillis();
x();
System.out.println("Thread id: " + Thread.currentThread().getId()
+ "\t" + (System.currentTimeMillis() - startTime));
}