- すべてのレコードの出力を追跡するにはどうすればよいですか?
- 共通変数を 1 つ入れて、故障記録データの数を増やすことはできますか?
@JBNizet が述べたように、AtomicInteger
成功カウントと失敗カウントの両方に使用できます。次のようなもの:
private final AtomicInteger successCounter = new AtomicInteger(0);
private final AtomicInteger failureCounter = new AtomicInteger(0);
...
threadPool.submit(new MyRunnable(successCounter, failureCounter));
...
public class MyRunnable {
private AtomicInteger successCounter;
private AtomicInteger failureCounter;
public MyRunnable(AtomicInteger successCounter, AtomicInteger failureCounter) {
this.successCounter = successCounter;
this.failureCounter = failureCounter;
}
public run() {
...
if (worked) {
successCounter.incrementAndGet();
} else {
failureCounter.incrementAndGet();
}
}
}
連続して失敗したレコードの数を追跡する必要があります。出来ますか?
これを行う 1 つの方法は、各行にトランザクション番号を付けて、最後に失敗したトランザクション番号を保存することです。次に、失敗をシーケンシャルとしてカウントするか、現在の失敗したトランザクション数がそうでない場合はシーケンシャル カウンターをリセットすることができます(last+1)
。
if (worked) {
lastFailedTransactionNumber = 0;
sequentialFailureCount = 0;
} else {
if (transactionNumber == lastFailedTransactionNumber + 1) {
sequentialFailureCount++;
... maybe log it or something?
}
lastFailedTransactionNumber = transactionNumber;
}