У меня есть тестовый файл с тремя строками, каждая строка начинается с метки времени в секундах. Я читаю эту метку времени и на ее основе планирую новый таймер для каждой считываемой метки времени. Почему, когда я запускаю потоки, созданные в методе «processFile», упомянутом ниже, консоль отображает вывод трех таймеров одновременно? Я ожидал увидеть выходные данные каждого таймера, разделенные задержкой в несколько секунд, поскольку отметка времени каждой из трех строк, которые я читал из файла, составляет 2 секунды, 15 секунд и 7 секунд соответственно? когда я запускаю программу, через несколько секунд я получаю приведенный ниже вывод «системного времени» сразу без задержки, разделяю их, несмотря на то, что метка времени, считываемая из файла, отличается!
Пожалуйста, дайте мне знать, почему это происходит и как это решить.
//this method is being called on a worker thread
private static void processFile(File dataFile) throws IOException {
// TODO Auto-generated method stub
System.out.println(WORKER_THREAD + " started.");
logfile = new MeasurementFile(dataFile, MeasurementFile.ENCODING_UTF_8);
System.out.println("Total lines in the file: " + logfile.getTotalLines());
System.out.println("#Parameters/line: " + logfile.getFileHash().get(logfile.getTotalLines()).getFullParameters().length);
System.out.println("Time Stamp in Seconds: " + logfile.getFileHash().get(logfile.getTotalLines()).getTimeStampInSec());
timer = new Timer();
for (int i = 1; i <= logfile.getTotalLines(); i++) {
++currentLine;
t = new Thread(new threadFile(), "logFile_Thread_" + i);
t.start();
}
}
static class threadFile implements Runnable {
public void run() {
timer.schedule(new timedTask(), (long) logfile.getFileHash().get(currentLine).getTimeStampInMilli());
}
}
static class timedTask extends TimerTask {
@Override
public void run() {
// TODO Auto-generated method stub
long nanoTimer = System.nanoTime();
//long milliTimer = System.currentTimeMillis();
System.out.println("systemTime(ns): " + nanoTimer);
}
}
Вывод:
file processing thread started.
Total lines in the file: 3
#Parameters/line: 9
Time Stamp in Seconds: 7.0
systemTime(ns): 4882255697670
systemTime(ns): 4882255928644
systemTime(ns): 4882255985104
MeasurementFile
. Как это считывает время с каждой строки, и вы уверены, что это не дает сбой и по умолчанию равно 0? - person Rudi Kershaw   schedule 05.12.2014System.out.println(logfile.getFileHash().get(currentLine).getTimeStampInMilli());
Так вы сможете убедиться, что получили ожидаемый результат. - person Rudi Kershaw   schedule 05.12.2014