Как мне убедиться, что временные метки, принадлежащие определенным событиям, действительно создаются и регистрируются одновременно с событием, которое произошло, когда запущено несколько потоков?
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());
}
, это не имеет большого смысла для меня, потому что это нормально, если несколько потоков выполняют свои задачи одновременно, просто время регистрации должно бытьточно .. Любая помощь?