簡體   English   中英

在迭代不起作用之前延遲循環

[英]delay for loop before Iteration not working

我只想在下一次迭代之前等待一段時間而不阻塞線程,因為其他進程必須 go 打開。

嘗試過計時器,但在 for 循環內沒有任何作用。

我卡住了。

有一個必須執行的方法,執行大約需要 20 秒。

我的for循環在下面


int[] ids ={1,2,3,4,5,6,87,234,6,346,3,4634,12};

        for (int i= 0, len = ids.length; i<len;i++) {
            Log.e(" Need to wait: ", " for every widget to update~");
            final int[] timesRun = {0};
            Timer timer = new Timer();
            timer.scheduleAtFixedRate(new TimerTask() {
                @Override
                public void run() {
                    timesRun[0] = timesRun[0] + 1;
                    Log.e("timesRun", String.valueOf(timesRun[0]));

                    Log.i("tag", "runs every 5 seconds");
                    if (timesRun[0] == 10) {
                        myProcessfor20Seconds();
                        timer.cancel();

                    }
                }
            }, 0, 5000);

            Log.i("tag", "Exiting the Timer");


        }

這也

int[] ids ={1,2,3,4,5,6,87,234,6,346,3,4634,12};

    for (int i= 0, len = ids.length; i<len;i++) {
        Log.e(" Need to wait: ", " for every widget to update~");
       final AtomicInteger timesRun = new AtomicInteger(0);

        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                timesRun.addAndGet(1);

                Log.e("timesRun", String.valueOf(timesRun.get()));

                Log.i("tag", "runs every 5 seconds");
                if (timesRun.intValue() ==  10) {
                    timer.cancel();

                }
            }
        }, 0, 5000);

        Log.i("tag", "Exiting the Timer");


    }

然而logcat是這樣的

2023-01-12 11:14:28.919 15096-15096/com.my.app E/ Need to wait::  for every widget to update~
2023-01-12 11:14:28.920 15096-15096/com.my.app I/tag: Exiting the Timer
2023-01-12 11:14:28.920 15096-15096/com.my.app E/ Need to wait::  for every widget to update~
2023-01-12 11:14:28.920 15096-15096/com.my.app I/tag: Exiting the Timer
2023-01-12 11:14:28.920 15096-15096/com.my.app E/ Need to wait::  for every widget to update~
2023-01-12 11:14:28.920 15096-15096/com.my.app I/tag: Exiting the Timer
2023-01-12 11:14:28.921 15096-15096/com.my.app E/ Need to wait::  for every widget to update~
2023-01-12 11:14:28.921 15096-15175/com.my.app E/timesRun: 1
2023-01-12 11:14:28.921 15096-15175/com.my.app I/tag: runs every 5 seconds
2023-01-12 11:14:28.921 15096-15174/com.my.app E/timesRun: 1
2023-01-12 11:14:28.921 15096-15174/com.my.app I/tag: runs every 5 seconds
2023-01-12 11:14:28.921 15096-15176/com.my.app E/timesRun: 1
2023-01-12 11:14:28.921 15096-15096/com.my.app I/tag: Exiting the Timer
2023-01-12 11:14:28.921 15096-15096/com.my.app E/ Need to wait::  for every widget to update~
2023-01-12 11:14:28.921 15096-15177/com.my.app E/timesRun: 1
2023-01-12 11:14:28.921 15096-15096/com.my.app I/tag: Exiting the Timer
2023-01-12 11:14:28.921 15096-15177/com.my.app I/tag: runs every 5 seconds
2023-01-12 11:14:28.921 15096-15096/com.my.app E/ Need to wait::  for every widget to update~
2023-01-12 11:14:28.922 15096-15178/com.my.app E/timesRun: 1
2023-01-12 11:14:28.922 15096-15178/com.my.app I/tag: runs every 5 seconds
2023-01-12 11:14:28.922 15096-15096/com.my.app I/tag: Exiting the Timer
2023-01-12 11:14:28.922 15096-15096/com.my.app E/ Need to wait::  for every widget to update~
2023-01-12 11:14:28.922 15096-15096/com.my.app I/tag: Exiting the Timer
2023-01-12 11:14:28.922 15096-15096/com.my.app E/ Need to wait::  for every widget to update~
2023-01-12 11:14:28.922 15096-15180/com.my.app E/timesRun: 1
2023-01-12 11:14:28.922 15096-15096/com.my.app I/tag: Exiting the Timer
2023-01-12 11:14:28.922 15096-15180/com.my.app I/tag: runs every 5 seconds
2023-01-12 11:14:28.922 15096-15096/com.my.app E/ Need to wait::  for every widget to update~
2023-01-12 11:14:28.922 15096-15181/com.my.app E/timesRun: 1
2023-01-12 11:14:28.922 15096-15176/com.my.app I/tag: runs every 5 seconds
2023-01-12 11:14:28.922 15096-15181/com.my.app I/tag: runs every 5 seconds
2023-01-12 11:14:28.922 15096-15096/com.my.app I/tag: Exiting the Timer
2023-01-12 11:14:28.922 15096-15179/com.my.app E/timesRun: 1
2023-01-12 11:14:28.922 15096-15096/com.my.app E/ Need to wait::  for every widget to update~
2023-01-12 11:14:28.922 15096-15182/com.my.app E/timesRun: 1
2023-01-12 11:14:28.923 15096-15179/com.my.app I/tag: runs every 5 seconds
2023-01-12 11:14:28.923 15096-15182/com.my.app I/tag: runs every 5 seconds
2023-01-12 11:14:28.923 15096-15096/com.my.app I/tag: Exiting the Timer
2023-01-12 11:14:28.923 15096-15096/com.my.app E/ Need to wait::  for every widget to update~
2023-01-12 11:14:28.923 15096-15183/com.my.app E/timesRun: 1
2023-01-12 11:14:28.923 15096-15183/com.my.app I/tag: runs every 5 seconds
2023-01-12 11:14:28.923 15096-15096/com.my.app I/tag: Exiting the Timer
2023-01-12 11:14:28.923 15096-15096/com.my.app E/ Need to wait::  for every widget to update~
2023-01-12 11:14:28.923 15096-15184/com.my.app E/timesRun: 1
2023-01-12 11:14:28.923 15096-15184/com.my.app I/tag: runs every 5 seconds
2023-01-12 11:14:28.923 15096-15096/com.my.app I/tag: Exiting the Timer
2023-01-12 11:14:28.923 15096-15096/com.my.app E/ Need to wait::  for every widget to update~
2023-01-12 11:14:28.923 15096-15185/com.my.app E/timesRun: 1
2023-01-12 11:14:28.923 15096-15185/com.my.app I/tag: runs every 5 seconds
2023-01-12 11:14:28.923 15096-15096/com.my.app I/tag: Exiting the Timer
2023-01-12 11:14:28.923 15096-15186/com.my.app E/timesRun: 1
2023-01-12 11:14:28.923 15096-15186/com.my.app I/tag: runs every 5 seconds
2023-01-12 11:14:28.946 15096-15096/com.my.app D/IS_CTS_MODE: false
2023-01-12 11:14:28.946 15096-15096/com.my.app D/MULTI_WINDOW_SWITCH_ENABLED: false
2023-01-12 11:14:29.026 15096-15096/com.my.app E/getting from HAWK :: 1

myProcessfor20Seconds();

在所有迭代完成后執行。

好像我需要一些同步的東西,但我被卡住了,我還在學習。 請幫忙。

我會保持簡單:啟動一個線程來運行你的方法,在執行之間有一個間隔,並在主線程中等待它完成。

Thread t = new Thread(() -> {
    for (int i = 0, len = ids.length; i < len; i++) {
        myProcessfor20Seconds();
        try {
            if (i < len - 1) // don't sleep after the last execution
                Thread.sleep(5000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }
}); // create the Thread with your background code as a Runnable

t.start(); // start the background thread

// Do other stuff while the Thread is running

try {
    t.join(); // wait for thread to finish
} catch (InterruptedException e) {
    throw new RuntimeException(e);
}

有更優雅的方法來處理異常,但這是基礎。

暫無
暫無

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

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