仅运行一次函数并强制在特定时间内返回值

时间:2014-03-26 20:07:06

标签: java multithreading swing timer timertask

我有一个函数说Foo()...我要求在特定时间内运行某个函数并强制它在给定时间内返回值。例如,如果我运行此函数100毫秒,那么无论多少个数字在list listofnumbers中添加whitin 100ms它应该返回那些值。我已经看到Timer作为一个解决方案但是Timer或TimerTask有API来每隔几秒调度一次任务。我想要的是只运行函数并返回它给出的任何值时间。

foo()
{
List lisof numbers
for(int i=0;i<somenumber;i++)
{
listofnumbers.add(i);
}

返回listofnumbers }

2 个答案:

答案 0 :(得分:4)

最简单的方法就是跟踪经过的时间。

List<Integer> generateList(int maxRuntime, int maxNum) {
    long startTime = System.currentTimeMillis();
    List<Integer> numbers = new ArrayList<Integer>();
    for(int i = 0; i < maxNum; i++) {
       if(System.currentTimeMillis() - startTime > maxRuntime) {
           break;
       }
       numbers.add(i);
    }
    return numbers;
}

我打电话给:

System.out.println(generateList(100, Integer.MAX_VALUE));

输出约为2041737

答案 1 :(得分:1)

使用AtomicReferenceScheduledExecutorService

创建AtomicReference<List<Something>>;让读者和作家分享。

当作家需要再次编写此列表时,请执行以下操作:

final List<Something> list = new ArrayList<>(ref.get());
// modify list
ref.set(list);

并安排该编写者使用内置ScheduledExecutorService功能。