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

引言

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

问题

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


 

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

思路

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

扫描二维码关注公众号,回复: 524552 查看本文章

猜你喜欢

转载自jxauwxj.iteye.com/blog/2353975