首页 > 解决方案 > 在 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());
}

对我来说没有多大意义,因为如果多个线程同时执行它们的任务是可以的,只是时间记录需要准确..有什么帮助吗?

标签: javamultithreadingloggingtimestampnanotime

解决方案


推荐阅读