• 欢迎访问web前端中文站,JavaScript,CSS3,HTML5,web前端demo
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏web前端中文站吧

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

JAVA web前端中文站 2年前 (2017-11-02) 1082次浏览 已收录 0个评论

你也许用过 System.currentTimeMillis(),但是你可能不知道它在高并发场景下对性能的影响。之前的测试数据具体多少我忘记了,但是我大概记得 System.currentTimeMillis()的调用比 new 一个普通对象要耗时的多(具体耗时高出多少我还没测试过,有人说是 100 倍左右)。因此在高并发下,在高频率使用 System.currentTimeMillis()的情况下,我们很有必要对 System.currentTimeMillis()进行一次优化。

更多精彩内容请看 web 前端中文站
http://www.lisa33xiaoq.net 可按 Ctrl + D 进行收藏

System.currentTimeMillis()之所以慢是因为去跟系统打了一次交道。具体需要你看过源码才知道。

本优化实现后台定时更新时钟,JVM 退出时,线程自动回收。

下面是相关优化的具体代码:

 public class SystemClock {  
 private final long period;  
 private final AtomicLong now;  
 // web 前端中文站:www.lisa33xiaoq.net  
 private SystemClock(long period) {   
 this.period = period;   
 this.now = new AtomicLong(System.currentTimeMillis());   
 scheduleClockUpdating();  }  
 private static class InstanceHolder {   
 public static final SystemClock INSTANCE = new SystemClock(1);  }  
 private static SystemClock instance() {   
 return InstanceHolder.INSTANCE;  }  
 private void scheduleClockUpdating() {   
 ScheduledExecutorService scheduler = 
 Executors.newSingleThreadScheduledExecutor(new ThreadFactory() {    
 public Thread newThread(Runnable runnable) {     
 Thread thread = new Thread(runnable, "System Clock");     
 thread.setDaemon(true);     
 return thread;    }   });   
 scheduler.scheduleAtFixedRate(new Runnable() {    
 public void run() {     
 now.set(System.currentTimeMillis());    }   }, period, period, 
 TimeUnit.MILLISECONDS);  }  
 private long currentTimeMillis() {   
 return now.get();  }  
 public static long now() {   
 return instance().currentTimeMillis();  }  
 public static String nowDate() {   
 return new Timestamp(
 instance().currentTimeMillis()).toString();  } }

下面是大量测试后得出的结果:

10 亿:43410,206,210.72815533980582%
1 亿:4699,29,162.0344827586207%
1000 万:480,12,40.0%
100 万:50,10,5.0%

以上上个仅供参考,具体和你的硬件配置等有关。

【注:本文源自网络文章资源,由站长整理发布】


web 前端中文站 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:高并发场景下 System.currentTimeMillis()的性能问题优化
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址