我想为我的java代码添加0.488 ms的延迟。但thread.sleep()和Timer函数只允许毫秒的粒度。如何指定低于该水平的延迟金额?向Java代码添加十进制毫秒延迟
回答
由于1.5你可以使用这个漂亮的方法java.util.concurrent.TimeUnit.sleep(long timeout)
:
TimeUnit.SECONDS.sleep(1);
TimeUnit.MILLISECONDS.sleep(1000);
TimeUnit.MICROSECONDS.sleep(1000000);
TimeUnit.NANOSECONDS.sleep(1000000000);
如果您想等待很短的微秒数,则不能依赖此项。要做到这一点的唯一方法是忙于等待一个线程。 – Dan
您可以使用Thread.sleep(long millis, int nanos)
请注意,你不能保证睡眠如何准确是。根据您的系统,定时器可能只精确到10ms左右。
在Windows JDK1.6.0_37,这种方法只需要添加一个毫秒,并调用Thread.sleep()。它完全无视纳米时间。 – kornero
@kornero:这就是为什么你不能保证这种方法的精确度:)尽管如此,在某些系统上,你可以获得亚毫秒级的精度。 –
TimeUnit.anything.sleep()调用Thread.sleep()方法和Thread.sleep()方法四舍五入到毫秒, 都睡( )不可用于小于毫秒精度
的Thread.sleep(长米利斯,INT毫微秒)执行:
public static void sleep(long millis, int nanos) throws java.lang.InterruptedException
{
ms = millis;
if(ms<0) {
// exception "timeout value is negative"
return;
}
ns = nanos;
if(ns>0) {
if(ns>(int) 999999) {
// exception "nanosecond timeout value out of range"
return;
}
}
else {
// exception "nanosecond timeout value out of range"
return;
}
if(ns<500000) {
if(ns!=0) {
if(ms==0) { // if zero ms and non-zero ns thread sleep 1ms
ms++;
}
}
}
else {
ms++;
}
sleep(ms);
return;
}
同样的情况是用方法wait(long,int);
- 1. 向java代码添加延迟
- 2. 电话延迟300毫秒
- 3. 如何将毫秒延迟添加到我的TimeSpan?
- 4. Java延迟2秒
- 5. 延迟Javascript效果500毫秒
- 6. Core Audio中的亚毫秒延迟
- 7. CAS更新的Cassandra亚毫秒延迟
- 8. RxJS延迟至少X毫秒
- 9. 计算连接速率(毫秒)(延迟)
- 10. 给现有代码添加延迟?
- 11. 向毫秒添加毫秒并通过JavaScript获取新日期
- 12. 延迟给定秒的代码
- 13. Java ScheduledThreadPoolExecutor延迟15毫秒/不一致的时间?
- 14. 当毫秒数很长时,将毫秒添加到Java日期
- 15. 延迟添加类2秒悬停()
- 16. 如何添加延迟2或3秒
- 17. 为循环添加1秒的延迟?
- 18. 需要在此代码上向鼠标移出添加延迟
- 19. Java - 如何将机器人延迟增加到60'000毫秒以上?
- 20. Rails ActionMailer在发送电子邮件之前添加几毫秒的延迟
- 21. Swift 2 - 向CGFloat添加十进制0
- 22. 添加延迟()
- 23. 十六进制代码的Java模式
- 24. 延迟2秒
- 25. 延迟jQuery - 在运行时向延迟合同添加回调
- 26. 延迟JavaScript代码
- 27. SQL DateTime添加毫秒
- 28. 添加毫秒到timeval C++
- 29. 添加延迟CSS添加
- 30. 添加可延迟事件的延迟
检查以下问题: http://stackoverflow.com/questions/824110/accurate-sleep-for-java-on-windows –