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

System.currentTimeMillis()的调用比new一个普通对象要耗时的多(具体耗时高出多少我还没测试过,有人说是100倍左右)

System.currentTimeMillis()之所以慢是因为去跟系统打了一次交道

后台定时更新时钟,JVM退出时,线程自动回收,得到的数据10亿:43410,206,210.72815533980582%

1亿:4699,29,162.0344827586207%

1000万:480,12,40.0%

100万:50,10,5.0%

参考代码如下:import java.util.Date;

import java.util.concurrent.Executors;

import java.util.concurrent.ScheduledExecutorService;

import java.util.concurrent.ThreadFactory;

import java.util.concurrent.TimeUnit;

public class SystemClock {

private final long period;

private volatile long now;

private static final SystemClock instance = new SystemClock(1);

private SystemClock(long period) {

this.period = period;

// this.now = new AtomicLong(System.currentTimeMillis());

this.now = System.currentTimeMillis();

scheduleClockUpdating();

}

public static long now() {

return instance.currentTimeMillis();

}

public static Date nowDate() {

return new Date(instance.currentTimeMillis());

}

private void scheduleClockUpdating() {

ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() {

public Thread newThread(Runnable runnable) {

Thread thread = new Thread(runnable, "SystemClock");

thread.setDaemon(true);

return thread;

}

});

scheduler.scheduleAtFixedRate(new Runnable() {

public void run() {

now = System.currentTimeMillis();

}

}, period, period, TimeUnit.MILLISECONDS);

}

private long currentTimeMillis() {

return now;

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值