一、返回的是毫秒
System.currentTimeMillis()函数是Java中一个返回当前时间的函数,这个时间是从1970年1月1日00:00:00 GMT开始的毫秒数。因此,该函数返回的是毫秒数而不是秒数。
long timeInMillis = System.currentTimeMillis();
System.out.println("当前时间:" + timeInMillis + "毫秒");
上述代码会输出当前时间的毫秒数。
而且,在Java中有许多与时间相关的类和方法都是以毫秒为单位的,比如Thread.sleep()方法的参数就是毫秒数。
try {
// 暂停当前线程2秒钟
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
上述代码会使得当前线程暂停2秒钟。
二、与大数字的处理
毫秒数可以很好地处理大数字,例如处理日期时间转换时会使用到毫秒数,在某些系统中,时间的精度更高需要使用到纳秒级别的时间。使用毫秒可以很好地解决这个问题。
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
String dateString = formatter.format(new Date(timeInMillis));
System.out.println(dateString);
上面的代码可以将当前时间转换成指定格式的字符串。
三、多线程下的时间同步问题
在多线程环境下,使用System.currentTimeMillis()的时候需要注意线程的同步问题。由于每个线程都有自己的上下文,因此在线程上下文切换时,如果另一个线程更新了时间,那么获取的时间就可能会不准确。
为了解决这个问题,我们可以使用ThreadLocal来存储每个线程的毫秒数,从而避免在不同线程之间发生时间同步冲突的问题。
private static final ThreadLocal<Long> threadLocal = new ThreadLocal<Long>(){
@Override
protected Long initialValue() {
return System.currentTimeMillis();
}
};
long timeInMillis = threadLocal.get();
上面的代码使用了ThreadLocal来避免多线程中使用System.currentTimeMillis()发生的时间同步问题。
四、时间的比较
我们可以使用毫秒数来比较两个时间的先后顺序,比如判断一个时间是否在另一个时间之前、之后还是同时。我们可以将时间转换成毫秒数进行比较,这种方式比较简单、高效。
long startTime = System.currentTimeMillis();
// 执行一些操作
long endTime = System.currentTimeMillis();
if (endTime < startTime) {
System.out.println("结束时间早于起始时间");
} else if (endTime > startTime) {
System.out.println("结束时间晚于起始时间");
} else {
System.out.println("开始时间和结束时间相同");
}
上述代码可以比较两个时间的先后顺序。
五、时间的加减计算
我们可以使用毫秒数进行时间的加减计算,非常方便。
long timeInMillis = System.currentTimeMillis();
// 加上5分钟
timeInMillis += 5 * 60 * 1000;
System.out.println("5分钟后:" + new Date(timeInMillis));
// 减去10秒钟
timeInMillis -= 10 * 1000;
System.out.println("10秒钟前:" + new Date(timeInMillis));
上述代码可以对当前时间进行加减计算。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/159735.html
微信扫一扫
支付宝扫一扫