说明:
主要使用在接收数据过快,但是又不需要那么多数据的情况
如下例子,使用定时器,每100ms收到一个数据,但是通过采样每1000ms得到一个数据。
图片:
代码:
public class Outer {
public static class Inner{//成员内部类
public static long startTms =0;
}
public Integer doSample(int value){
if(Inner.startTms == 0){
Inner.startTms=System.currentTimeMillis();
}
long endTms = System.currentTimeMillis();
if(endTms-Inner.startTms>1000)
{
Inner.startTms+=1000;//每秒钟完成一次采样
return value;//有效数据
}
return null;//如果间隔过短,为无效数据
}
public int valueRand = 0;
public static void main(String[] args) {
Outer out = new Outer();
out.valueRand=0;
Timer timer = new Timer();// 实例化Timer类
timer.schedule(new TimerTask() {
public void run() {
//System.out.println("vvvv");
out.valueRand++;
Integer value =out.doSample(out.valueRand);
if(value !=null)
{
System.out.println("采样新值:"+value);
}
if(out.valueRand>100){
System.out.println("退出");
this.cancel();
}
}
}, 0,100);// 毫秒
//System.out.println("退出-----");
}
}
输出:
新值:12
新值:22
新值:32
新值:42
新值:52
新值:62
新值:72
新值:82
新值:92
退出
改进:
Java是个奇葩的语言,可以把内部类当成成员变量来看,所以把上面的调用部分封装以下,放到内部类,调用的时候就当调用一个内部函数就好了。
关于: