`
lizhou
  • 浏览: 108268 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java 速度控制器

阅读更多

需求驱动开发。因为项目需要,做了一个小小的速度控制器。速度控制基本能达到要求。 

import java.util.concurrent.ArrayBlockingQueue;

/**
 * 由speed和speedUnit公共合作来表示速度
 *
 */
public class SpeedControl {
	
	/**默认次数,30次*/
	private int speed = 30;
	
	/**默认单位,每1秒钟*/
	private long speedUnit = 1000 * 1;
	
	/**利用队列先进先出的特性,以及可控的容量大小控制速度*/
	private ArrayBlockingQueue<Long> list = new ArrayBlockingQueue<Long>(speed);
	
	public SpeedControl() {}
	
	public SpeedControl(int speed, long speedUnit) {
		this.speed = speed;
		this.speedUnit = speedUnit;
	}
	
	public void control() {
		long startTime = 0L;
		long endTime = 0L;
		if (list.remainingCapacity() == 0) {//等于0说明缓存已满,需要检查最后时间和开始时间的差值,看是否符合要求
			startTime = list.poll();
			endTime = System.currentTimeMillis();
			long interval = endTime - startTime;
			if (interval < speedUnit) {//小于说明执行速度过快,需要限速
				try {
					long sleepTime = speedUnit - interval;
					Thread.sleep(sleepTime);
				} catch (InterruptedException e) {
				}
			} else {
				try {
					list.put(endTime);
				} catch (InterruptedException e) {
				}
			}
		} else {
			endTime = System.currentTimeMillis();
			try {
				list.put(endTime);
			} catch (InterruptedException e) {
			}
		}
	}
}

 

 

使用方式如下:

public class ExacteCount {
	
	private int count = 0;
	
	public void doAction() {
		SpeedControl control = new SpeedControl();
		while (true) {
			control.control();
			System.out.println("count = " + count++);
		}
	}
	
	public static void main(String[] args) {
		ExacteCount exacte = new ExacteCount();
		exacte.doAction();
	}
}

 

使用比较简单。如果哪位有更好的方式,可以留下代码共同分享

1
2
分享到:
评论
1 楼 di1984HIT 2014-02-20  
行,这样就可以,不过这不是匀速限速,匀速的话,需要计算好时间单元,然后schedule。

相关推荐

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

    3.11 访问控制器 3.11.1 implies()方法 3.11.2 栈检查示例 3.11.3 一个回答“是”的栈检查 3.11.4 一个回答“不”的栈检查 3.11.5 doprivileged()方法 3.11.6 doprivileged()的一个无效使用 ...

    java中ping命令ping工具类(循环ping)

    ping是一个DOS命令,一般用于检测网络通或不通 ,也叫时延,其值越大,速度越慢。 PING (Packet Internet Groper),因特网包探索器,用于测试网络连接量的程序。Ping发送一个ICMP(Internet Control Messages ...

    BeoPlayer Java v0.62

    很棒的动画效果,怎么说呢... 修正列表为空时抛出的null异常 修正列表为空时动画线程的死锁 &lt;br&gt;-- 2008-7-2 修正音量控制模块 (终于可以不用java自带混频器了) 必须在Line被open之后取得控制器!...

    深入Java虚拟机

    3.11 访问控制器 3.11.1 implies()方法 3.11.2 栈检查示例 3.11.3 一个回答“是”的栈检查 3.11.4 一个回答“不”的栈检查 3.11.5 doPrivileged()方法 3.11.6 doPrivileged()的一个无效使用 ...

    JAVA面试题最全集

    一、Java基础知识 1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入...

    java信息管理系统

    本系统基于Java平台,采用设计模式:MVC(模型--视图--控制),采用的技术:Jsp+JavaBean+Struts+JDBC,数据库:MySQL Struts采用Struts 1.2 版本,MySQL采用MySQL5.0 &lt;br&gt;系统特色: 1,栏目无限级分类,形成...

    【文献综述】基于JAVA的俄罗斯方块游戏设计与实现.pdf

    很多最近的调查显示 Java 的程序运行速度比几年前要高出许多,有些同 样功能的程序的效率甚至超过了 C++和 C 语言编写的程序。Java 语言在最开始应用的时候是 没有解释层的,所有需要编译的代码都直接转换成机器的...

    java面试800题

    template模板方法模式、memento备忘录模式、observer观察者模式、command命令模式、state状态模式、strategy策略模式、mediator调停者模式、interpreter解释器模式、visitor访问者模式、chain of responsibility责任...

    java 面试题 总结

    但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...

    java课程设计报告贪吃蛇游戏设计.doc

    本设计所开发的是基于Java的一个贪吃蛇游戏软件,主要实现游戏的速度控制、游戏 的暂停、游戏的退出等功能,分为: 游戏主界面模块、游戏控制模块以二个模块。 3.1.2程序概述 本程序是一个利用Java应用软件制作的...

    Blynk Server-0.41.13-java8.jar

    Blynk是一项物联网(IoT)服务,旨在使远程控制和从您的...近年来,使用微控制器和物联网设备的智能对象迅速普及。诸如Arduino或Raspberry Pi之类的开发板可用于控制一切,从家里的电源插座到运动激活的圣诞节装饰品。

    java实现的电梯仿真程序

    (7) 电梯运行速度为S 秒/层(S 值可以根据仿真情况在1~5 之间确定),每人上下时 间为T 秒(T 值可以根据仿真情况在2~10 之间确定)。 (8) 电梯运行的方向由先发出请求者决定,不允许后发出请求者改变电梯的当前...

    文件管理系统java源代码

    java 写的文件管理系统(带注释),具有如下功能(附上直接可运行的Myexplorer.jar 和 安装版本的封装MyExplorer_setup.exe文件) 2.3基本功能:(1)文件和目录的基本操作,比如文件和目录的创建、删除、复制、移动...

    深入理解_Java_虚拟机 JVM_高级特性与最佳实践

    / 113 5.3 实战:Eclipse运行速度调优 / 114 5.3.1 调优前的程序运行状态 / 114 5.3.2 升级JDK 1.6的性能变化及兼容问题 / 117 5.3.3 编译时间和类加载时间的优化 / 122 5.3.4 调整内存设置控制垃圾收集频率 ...

    java面试题

    Struts2只是起到一个数据接收和转接的功能,就是Controller控制器,而传来数据的页面叫view显示层,Struts2将数据提交给进行处理的类叫Model模型层,专门进行数据处理和数据库的连接。 heap和stack有什么区别? 答:...

    深入java虚拟机第二版

    3.11 访问控制器 3.11.1 implies()方法 3.11.2 栈检查示例 3.11.3 一个回答“是”的栈检查 3.11.4 一个回答“不”的栈检查 3.11.5 doPrivileged()方法 3.11.6 doPrivileged()的一个无效使用 3.12 Java...

    java 常用设计模式chm

    (1)如果那个对象是一个是很大的图片,需要花费很长时间才能显示出来,那么当这个图片包含在文档中时,使用编辑器或浏览器打开这个文档,打开文档必须很迅速,不能等待大图片处理完成,这时需要做个图片Proxy来代替真正的...

Global site tag (gtag.js) - Google Analytics