高并发场景下java的System.currentTimeMillis()性能优化

引言

        System.currentTimeMillis()是java中最常用的获取系统时间的方法,它返回从 UTC 1970 年1月1日午夜开始经过的毫秒数。

 

问题

       在多线程环境下频繁调用System.currentTimeMillis()来获得当前毫秒数性能会非常低,为什么呢?看一下jdk的源码,


 

       可以看到currentTimeMillis()是一个本地方法,就是说,这是通过c/c++来跟硬件打交道后才能获取到。在高并发的情况下,如果每个线程都通过System.currentTimeMillis()来获得当前毫秒数,对CPU的消耗是相当高的。在高并发情况下,要避免频繁调用它,为了提高效率,该如何办?通常的做法是,牺牲一定的精度来提高性能。

 

思路

         通过在一个单例中启一个线程,一毫秒调用一次System.currentTimeMillis(),然后通过一个变量把它缓存起来,其他线程获取时间就直接取这个变量的值就好了,避免了每一个线程单独去调度System.currentTimeMillis()。在高并发中线程越多的场景下效果越明显。毕竟从内存中取,肯定要比从硬件中取要快的多哇。

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值