gpt4 book ai didi

java - 延迟执行Java方法中的代码

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:52:13 27 4
gpt4 key购买 nike

我想在我的 java (Android) 程序中每 2 秒生成一次随机数,持续至少 10 分钟。但我只想在一种方法中而不是整个程序中暂停/延迟代码的执行。

我试过像这样使用 Thread -

boolean stop = false;
int random_number = 0;

while(true){
if(stop){ //if stop becomes true, then
return; //terminate the method
}

random_number = Math.random(); //generate random number
//which is used bu some other
//part of code
try {
Thread.sleep(2000); //delay the code for 2 secs
} catch(InterruptedException ex) { //and handle the exceptions
Thread.currentThread().interrupt();
}
}

但是,这不起作用,因为 Thread.sleep 停止了整个程序的执行,而不是仅仅停止了方法内部代码的执行,我的整个屏幕都变成了空白。

我也试过使用 Handler但它也没有用,因为它不会停止执行我的方法中的代码,而是只是堆叠起来。

这将更好地展示它的工作原理 -

while(true){
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
System.out.println("After 2 secs"); //this gets printed
//later
}
}, 2000);
System.out.println("Before 2 secs"); //this gets printed first
}

因此,代码堆叠起来,使其等同于使用 while 循环,并使其变得非常慢。

此外,由于我正在为 Android 开发应用程序,我在 Java SE 6 上运行,所以我不能使用 scheduleAtFixedRate .有没有其他方法可以做到这一点?

非常感谢!

最佳答案

private Timer timer;
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
//Generate number
}
}, 2000, 2000);

//Documentation (From SDK)
/**
* Schedule a task for repeated fixed-rate execution after a specific delay
* has passed.
*
* @param task
* the task to schedule.
* @param delay
* amount of time in milliseconds before first execution.
* @param period
* amount of time in milliseconds between subsequent executions.
public void scheduleAtFixedRate(TimerTask task, long delay, long period) {
if (delay < 0 || period <= 0) {
throw new IllegalArgumentException();
}
scheduleImpl(task, delay, period, true);
}

当你想停止它的时候

timer.cancel()

关于java - 延迟执行Java方法中的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28147557/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com