Регистрация точных временных меток в многопоточной среде Java - PullRequest
0 голосов
/ 15 мая 2019

Как мне убедиться, что временные метки, принадлежащие определенным событиям, действительно создаются и регистрируются одновременно с событием, которое произошло, когда запущено несколько потоков?

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

, что даст неверное время для задачи 1.Когда я использую глобальную блокировку, чтобы сделать что-то вроде

synchronized(lock) {
    executeTask2(); // assume Task2 takes 10 seconds
    logger.log('Task 2 finished at '+System.nanoTime());
}

, это не имеет большого смысла для меня, потому что это нормально, если несколько потоков выполняют свои задачи одновременно, просто время регистрации должно бытьточно .. Любая помощь?

...