在Java多线程环境中记录准确的时间戳

时间:2019-05-15 14:09:32

标签: java multithreading logging timestamp nanotime

我如何确保属于某些事件的时间戳实际上是在运行多个线程的事件发生的同时正确创建和记录的?

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());
}

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

0 个答案:

没有答案