我的编程空间,编程开发者的网络收藏夹
学习永远不晚

关于Java 获取时间戳的方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

关于Java 获取时间戳的方法

Java有两个取时间戳的方法:System.currentTimeMillis()System.nanoTime(),它们的使用场景是有区别的,当前网上一些文章对于这两个方法的性能讨论存在一些片面的描述,本文希望能给出一个简单的最终答案。

System.currentTimeMillis() 存在性能问题?

答案是否定的。

这两个方法性能差异取决于操作系统。

Windows:

在 Windows 下,System.currentTimeMillis() System.nanoTime() 要快很多,这是因为 Windows 系统为前者提供的只是一个缓存变量,而后者则是实时的去硬件底层获取计数。

  • 参考

所以如果你的生产环境是 Windows,请尽可能避免使用 System.nanoTime()。

Linux:

在 Linux 下,两者的执行耗时相差不大,不论是单线程还是多线程。

不同的虚拟机实现会带来性能差异

如今的云主机主要有 Xen 和 KVM 两种实现方式,网上有文章发现它们在取系统时间方面存在性能差异。

当我们的虚拟机用的是 Xen 时,取时间的耗时会是 KVM 的十倍以上。不过上文也提供了遇到此类问题该如何解决的方案。

需要写一个专门的类来提升 System.currentTimeMillis() 性能吗?

不需要。那属于画蛇添足。

我的测试代码

我的测试代码如下,没有任何依赖,可以直接用 javac 编译然后运行。读者有兴趣可以试试。

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;


public class TimePerformance {


public static final int LOOP_COUNT = 9999999;
public static final int THREAD_COUNT = 30;


public static void main(String[] args) {


Runnable millisTest = () -> {


long start = System.currentTimeMillis();
for (int i = 0; i < LOOP_COUNT; i++) {
System.currentTimeMillis();
}
long end = System.currentTimeMillis();


System.out.printf("%s : %f ns per call\n",
Thread.currentThread().getName(), ((double)end - start) * 1000000 / LOOP_COUNT);
};


Runnable nanoTest = () -> {


long start = System.currentTimeMillis();
for (int i = 0; i < LOOP_COUNT; i++) {
System.nanoTime();
}
long end = System.currentTimeMillis();


System.out.printf("%s : %f ns per call\n",
Thread.currentThread().getName(), ((double)end - start) * 1000000 / LOOP_COUNT);
};


Consumer<Runnable> testing = test -> {
System.out.println("Single thread test:");
test.run();


System.out.println(THREAD_COUNT + " threads test:");
List<Thread> threads = new ArrayList<>();
for (int i = 0; i < THREAD_COUNT; i++) {
Thread t = new Thread(test);
t.start();
threads.add(t);
}
// Wait for all threads to finish
threads.forEach(thread -> {
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
});
};


System.out.println(" Test System.nanoTime()");
testing.accept(nanoTest);
System.out.println(" Test System.currentTimeMillis()");
testing.accept(millisTest);
}
}

因为我用的是 Windows,所以执行输出当中System.nanoTime() 明显非常慢。具体输出内容我就不放出来了,因为不具有参考价值,大多数生产环境用的是 Linux。

到此这篇关于关于Java 获取时间戳的方法的文章就介绍到这了,更多相关Java 获取时间戳内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

关于Java 获取时间戳的方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

使用java获取时间戳的方法有哪些

使用java获取时间戳的方法有哪些?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、java获取时间戳首先我们先拿上面的例子说起吧。如何获取今天零点以及明天零点的两个时间戳
2023-05-30

C#获取时间戳的方法及时间戳转换问题

本文主要介绍了C#获取时间戳的方法及时间戳转换问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-02-06

学习Golang:获取时间戳的方法

Golang教程:如何获取时间戳,需要具体代码示例时间戳(timestamp)是指某一时刻相对于某一固定的起始时间点所经过的秒数或毫秒数。在软件开发中,获取时间戳是一项常见的操作,可以用于记录事件发生的顺序、计算时间间隔等等。在Golang
学习Golang:获取时间戳的方法
2023-12-29

Golang时间戳获取方法详解

Golang时间戳获取方法详解在Golang中,时间戳是一种非常重要的时间表示方式。时间戳通常是一个整数,表示从某个固定的时间点开始,到当前时间的秒数或毫秒数。在许多应用场景中,我们常常需要获取当前时间的时间戳,并进行相关操作和计算。本文
Golang时间戳获取方法详解
2024-01-16

java怎么获取时间戳

在Java中,可以使用`System.currentTimeMillis()`方法获取当前的时间戳。这个方法返回的是自1970年1月1日以来的毫秒数。下面是一个简单的示例代码:```javapublic class Main {public
2023-08-31

c++获取时间戳的方法有哪些

在C++中获取时间戳的方法通常有以下几种:使用标准库中的time()函数来获取当前系统时间的时间戳,返回的是从1970年1月1日0时0分0秒开始到现在的秒数。#include #include int m
c++获取时间戳的方法有哪些
2024-03-07

mysql获取时间戳的方法是什么

在MySQL中获取时间戳的方法是使用UNIX_TIMESTAMP()函数。UNIX_TIMESTAMP()函数返回当前日期时间的UNIX时间戳,即从1970年1月1日开始的秒数。以下是一个示例:SELECT UNIX_TIMESTAMP(
mysql获取时间戳的方法是什么
2024-04-09

ubuntu获取时间戳的方法是什么

本篇内容介绍了“ubuntu获取时间戳的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.打开终端命令行模式。2.直接执行“dat
2023-07-04

linux获取时间戳的方法是什么

在Linux系统中,获取时间戳(也称为Unix时间戳或Epoch时间)的方法通常有两种:使用date命令:可以使用date命令来获取当前时间戳。在终端中输入以下命令即可获取当前时间戳:date +%s这将返回当前时间戳的秒数。使用其他编程语
linux获取时间戳的方法是什么
2024-03-12

使用Golang获取当前时间的时间戳的方法

Golang如何获取当前时间的时间戳,需要具体代码示例时间戳是指某个时间点距离1970年1月1日00:00:00 UTC时间的秒数。在Golang中,我们可以使用time包提供的函数来获取当前时间的时间戳。下面将具体介绍如何在Golang
使用Golang获取当前时间的时间戳的方法
2024-01-16

javascript获取时间戳的5种方法详解

这篇文章主要介绍了javascript获取时间戳的5种方法详解,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-03-19

PHP获取特殊时间戳的方法整理

时间在我们日常的代码编写中会是经常出现的筛选或排序条件,尤其是一些特殊时间节点的时间显得尤为突出。今天对部分相对简便的方法进行了部分整理,需要的可以参考一下
2023-01-10

java怎么获取当前时间戳

在Java中,可以使用`System.currentTimeMillis()`方法获取当前时间戳,返回的是从1970年1月1日00:00:00 GMT到当前时间的毫秒数。另外,可以使用`Instant.now().toEpochMilli(
2023-10-24

php获取当前时间戳的方法是什么

本篇内容主要讲解“php获取当前时间戳的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php获取当前时间戳的方法是什么”吧!php获取当前时间戳的方法:1、直接使用time()函数,语
2023-06-25

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录