我想在Java中用5ms执行几行代码。以下是我的代码片段:
public void delay(ArrayList<Double> delay_array, int counter_main) {
long start=System.currentTimeMillis();
ArrayList<Double> delay5msecs=new ArrayList<Double>();
int index1=0, i1=0;
while(System.currentTimeMillis() - start <= 5)
{
delay5msecs.add(i1,null);
//System.out.println("time");
i1++;
}
for(int i=0;i<counter_main-1;i++) {
if(delay5msecs.get(i)!=null) {
double x1=delay_array.get(i-index1);
delay5msecs.add(i,x1);
//System.out.println(i);
} else {
index1++;
System.out.println("index is :"+index1);
}
}
}
现在问题是整个数组都填充了空值,我也得到了一些与索引相关的异常。基本上,我想用0到5ms填充我的数组列表并发布填充其他数组列表中的数据。很长一段时间以来我都没有完成编码。感谢您的帮助。 谢谢。
答案 0 :(得分:0)
System.currentTimeMillis()
可能没有5ms所需的分辨率。无论如何,Windows上的粒度可能不会超过15ms,因此您的代码对平台非常敏感,实际上可能无法满足您的需求。
您需要的解决方案可能适用于System.nanoTime()
,但同样,您可能需要研究平台限制。我记得你不能只是扩大你获得的价值,让它在任何地方都能发挥作用。
如果您可以保证没有其他线程运行此代码,那么我认为一个天真的循环和填充将起作用,而不必实现等待填充线程完成的工作线程。
您应该尝试使用Collection实用程序和for-each循环,而不是在第二部分中执行所有这些索引数学。
我想我也应该警告你,普通JVM中的任何内容都不能保证是实时的。因此,如果您需要 hard ,可靠,可重复的5ms,您可能会运气不佳。