簡體   English   中英

循環執行3次Java

[英]loop executing 3 times java

嗨,我不明白為什么這個循環每秒執行3次。 它實際上是下載速度計算代碼,非常簡單。 它測量前1秒鍾完成的字節,然后將其添加到列表中,然后取列表中所有項目的平均值,然后更新gui,最后睡眠1秒鍾。

private void update() {
    List<Float> list = new ArrayList<>();
    do {
        float averageSpeed = 0;
        // Calculating
        // I have a multiple threads which are downloading this file in segments
        // and all of them increment value of data.bytesDone when ever
        // they download a portion of data so I calculate bytesDone in one sec
        // and then take average of it using a list which contain speed values of
        // previous 20 sec. 
        float speed = (data.bytesDone.get() - currentBytes);
        currentBytes = data.bytesDone.get();

        System.out.println(speed);

        list.add(speed);
        if (list.size() > 20) {
            list.remove(0);
        }
        for (Float increment : list) {
            averageSpeed += increment;
        }
        averageSpeed /= list.size();

        // Updating Gui //

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    } while (data.state.equals(State.ACTIVE) && data.bytesDone.get() != data.sizeOfFile);
}

編輯:伙計們,我真的不明白為什么此循環每秒打印3次,它總是應該每秒打印1次。 TY

而不是使用Thread.sleep(1000); 您可以考慮使用此位。

做完事后{

long startMili = System.currentTimeMillis();

而不是整個Thread.sleep(1000)東西放進去。

long currentMili = System.currentTimeMilis();
while(currentMili - startMili < 1000){
    long currentMili = System.currentTimeMilis();
} 

這將確保該代碼每秒循環1次。

如果這不能解決問題,那么由於使用的是GUI,因此可能存在某種線程問題。 您怎么稱呼更新? 是否只有一個線程使用update()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM