nai*_*dat 3 java time android timer scheduledexecutorservice
我使用ScheduledExecutorService,我希望它每隔10秒进行一次计算一分钟,然后在那一分钟后给我返回新的值.我该怎么做?
示例:所以它收到5它增加+1六次然后它应该在一分钟后返回值11.
到目前为止,我没有工作的是:
package com.example.TaxiCabs;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import static java.util.concurrent.TimeUnit.*;
public class WorkingWithTimeActivity {
public int myNr;
public WorkingWithTimeActivity(int nr){
myNr = nr;
}
private final ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(1);
public int doMathForAMinute() {
final Runnable math = new Runnable() {
public void run() {
myNr++;
}
};
final ScheduledFuture<?> mathHandle =
scheduler.scheduleAtFixedRate(math, 10, 10, SECONDS);
scheduler.schedule(
new Runnable() {
public void run() {
mathHandle.cancel(true);
}
}, 60, SECONDS);
return myNr;
}
Run Code Online (Sandbox Code Playgroud)
}
并在我的主要活动中,我希望它在1分钟后将我的txtview文本更改为11;
WorkingWithTimeActivity test = new WorkingWithTimeActivity(5);
txtview.setText(String.valueOf(test.doMathForAMinute()));
Run Code Online (Sandbox Code Playgroud)
您应该使用Callable哪个可以返回值而不是Runnable
Callable接口类似于Runnable,因为它们都是为其实例可能由另一个线程执行的类而设计的.但是,Runnable不会返回结果,也不会抛出已检查的异常.
public class ScheduledPrinter implements Callable<String> {
public String call() throws Exception {
return "somethhing";
}
}
Run Code Online (Sandbox Code Playgroud)
然后像下面一样使用它
ScheduledExecutorService scheduler = Executors
.newScheduledThreadPool(1);
ScheduledFuture<String> future = scheduler.schedule(
new ScheduledPrinter(), 10, TimeUnit.SECONDS);
System.out.println(future.get());
Run Code Online (Sandbox Code Playgroud)
这是一次性计划,因此一旦返回get调用,它将只执行一次您需要再次安排它.
但是在你的情况下,一旦你的条件到达,通过调用cancel取消调度,就可以很容易地使用一个简单的AtomicInteger调用来addAndGet比较返回的值.
| 归档时间: |
|
| 查看次数: |
8952 次 |
| 最近记录: |