java - 在 java 多线程环境中记录准确的时间戳
问题描述
我如何确保在多个线程运行时事件发生的同时实际创建和记录属于某些事件的时间戳?
class Thread1 extends Thread {
void run() {
executeTask1();
logger.log('Task 1 finished at '+System.nanoTime());
}
}
class Thread2 extends Thread {
void run() {
executeTask2(); // assume Task2 takes 10 seconds
logger.log('Task 2 finished at '+System.nanoTime());
}
}
class Main {
public static void main(String[] args) {
Thread1 thread=new Thread1();
thread1.start()
Thread2 thread=new Thread2();
thread2.start()
}
}
现在执行顺序可能是这样的:
executeTask1();
executeTask2(); // assume Task2 takes 10 seconds
logger.log('Task 1 finished at '+System.nanoTime());
logger.log('Task 2 finished at '+System.nanoTime());
这会给Task1一个错误的时间。当我使用全局锁做类似的事情时
synchronized(lock) {
executeTask2(); // assume Task2 takes 10 seconds
logger.log('Task 2 finished at '+System.nanoTime());
}
对我来说没有多大意义,因为如果多个线程同时执行它们的任务是可以的,只是时间记录需要准确..有什么帮助吗?
解决方案
推荐阅读
- java - REST 请求 json Long 与原始 Long 不同
- kubernetes-helm - helm chart repo add 404 not found
- c# - C# WPF 窗口边距
- textbox - 文本框中只允许三个数值或字符
- python - 如何将数据中的数字放在条形图python上方
- python - argrelmin 的顺序:在两边指定不同的顺序
- laravel - 如何使用 JWT 在 Apiato 项目中编写生成令牌的函数?
- ssl - Tomcat 未在 8443 端口启动
- spring-data - 有没有办法在 Spring Data MongoDB 中不使用 @Version 注释来配置版本属性?
- algorithm - N级字符串压缩:解压缩算法