我有一个函数说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 }
答案 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)
使用AtomicReference
和ScheduledExecutorService
。
创建AtomicReference<List<Something>>
;让读者和作家分享。
当作家需要再次编写此列表时,请执行以下操作:
final List<Something> list = new ArrayList<>(ref.get());
// modify list
ref.set(list);
并安排该编写者使用内置ScheduledExecutorService
功能。