nanoTime vs currentTimeMillis 比较

System.nanoTime与System.currentTimeMillis比较

首先:

  • currentTimeMillis返回的是系统当前时间和1970-01-01之前间隔时间的毫秒数,如果系统时间固定则方法返回值也是一定的(这么说是为了强调和nanoTime的区别),精确度是毫秒级别的
  • nanoTime的返回值本身则没有什么意义,因为它基于的时间点是随机的,甚至可能是一个未来的时间,所以返回值可能为负数。但是其精确度为纳秒,相对高了不少。
  • currentTimeMillis不仅可以用来计算代码执行消耗的时间 ,也可以和Date类方便的转换。而nanoTime则不行
  • 可以这么说吧,currentTimeMillis是一个时钟,而nanoTime是一个计时器,你可以用时钟来计算时间差,也可以用来单纯的看时间,但是作为计时器的nanoTime则只能用来计算时间差,好在优点是精确度高
  • currentTimeMillis是基于系统时间的,也就是说如果你再程序执行期间更改了系统时间则结果就会出错,而nanoTime是基于CPU的时间片来计算时间的,无法人为干扰

  • 前面说了nanoTime基于的时间点是随机的,但是对于同一个JVM里,不同地方使用到的基点时间是一样的

https://blog.csdn.net/yuxiuzhiai/article/details/51531291

关于nanoTime

04-12

我现在要做一个提醒的小程序,如果满足某条件,则每隔10分钟打印一次(也就是提醒一次),一开始用currentTimeMillis()感觉很不准,就改用nanoTime,但发现还是有很大问题rn[code=Java]rnpublic void sendMessage()rn new Thread() rn public void run() rn try rn boolean flag = true;rn long starttime = 1l;rn long endtime = 1l;rn rn while(flag)rn if(readFromTxt().equals("yes"))rn if(endtime - starttime > 1000 * 1000 * 1000 * 600 || endtime - starttime == 0)rn HumanResourceBO bo = new HumanResourceBO();rn Result result = bo.getRetireWarning(dayleft);rn ESSBean[] beans = result.getAllBeans();rn rn if(beans != null && beans.length != 0)rn starttime = System.nanoTime();rn WarningPO po = null;rn String SMS_CONTENT = "";rn String url = "";rn rn for(int i = 0; i < beans.length; i++)rn po = (WarningPO)beans[i];rn SMS_CONTENT = po.getOrgname() + "的" + po.getUserName() + "将于" + String.valueOf(po.getRetiredate()).substring(0,10) + "退休";rn rn System.out.println(SMS_CONTENT);rn rn rn rn rn rn endtime = System.nanoTime();rn rn elsern flag = false;rn rn catch (Exception e) rn // TODO Auto-generated catch blockrn e.printStackTrace();rn rn rn .start();rn[/code]rn我不知是不是我逻辑写的有问题,endtime - starttime > 1000 * 1000 * 1000 * 600 应该是判断是否大于10分钟才会执行里面的打印吧,但我运行时发现他压根就没停,我断点跟了,发现starttime为4630644850788,endtime为4635098372383,明明不满足条件啊,为什么还能进循环,真是糊涂了,后来我改成endtime - starttime > 1000 * 1000 * 1000 * 10,也就是每隔10秒打印一次,发现虽然不准确,大概2,3秒就打印了一次,但最起码中间是有停顿了,完后我也试过改成5秒和20秒,结果都不停,就10秒有的作用,不知为什么啊

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试