Ваша текущая настройка не работает, потому что вы используете AtomicLong
неправильно.Определение любого Atomic
-класса в одном потоке является просто неправильным использованием этого API.
Теперь, почему я сказал, что единственный поток, хорошо, что вы синхронизируете, когда кто-то входит в ваш метод, который просто говорит, что только один потокодновременно может использовать указанный способ.Что приводит нас к проблеме:
-
AtomicLong
является локальной переменной
Вы, вероятно, хотели определить свои downloadSize
и totalWriteCount
как член вашего class
.Например:
public class YourClass {
private final AtomicLong totalWriteCount = new AtomicLong(0);
private final AtomicLong downloadSize = new AtomicLong(0);
/* constructors and other methods */
private synchronized long getDownloadSize() {
for (DownloadTask task : downloadTasks) {
final long writeCount = task.getWriteCount();
totalWriteCount.addAndGet(writeCount);
final long downloadSize = task.getPosition().getDownloadSize();
lastDownloadSize.addAndGet(downloadSize);
}
System.out.println("===== writeCount : " + totalWriteCount + "lastDownloadSize : " + lastDownloadSize);
return totalWriteCount.addAndGet(lastDownloadSize.get());
}
}