[英]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.