1

よろしくお願いします。私はいくつかのデータベース作業を実行しているJavaベースのツールを開発しています。私は非常に単純な問題を抱えています。何らかの理由で、タスクを完了するために報告された時間が正しくありません。

public static void makeDatabaseThreaded() throws IOException, InterruptedException {        
    final long startTime = System.nanoTime();       

    ArrayList<String> tablesMade = new ArrayList<>();
    File rootDirectory = root;
    String[] files = rootDirectory.list();
    double percentDone = 0;
    double numOfTablesMade = 0;
    double numberOfTables = 62.0;
    DatabaseBuilderThread lastThread = null;
    for (int i = 0; i <= files.length - 1; i++) {

        if (!files[i].contains(".csv")) {
            continue;
        }
        File file = new File(rootDirectory + File.separator + files[i]);

        String tableName = getTableNameFromFile(file);
        if (!tablesMade.contains(tableName)) {
            tablesMade.add(tableName);

            DatabaseBuilderThread thread = new DatabaseBuilderThread(i, file);
            lastThread = thread;
            thread.start();
            threadsRunning++;

            numOfTablesMade++;
            percentDone = (int) (100.0 * (numOfTablesMade) / (numberOfTables));

            while (threadsRunning > 10) {
                Thread.sleep(1000);
            }
            System.out.println(percentDone + "% done. Making Table For File: "  + file.getName());
        }
    }

    //Make Sure all threads are done
    lastThread.join();

    final long endTime = System.nanoTime();
    final long duration = endTime - startTime;
    Time time = new Time(duration);
    System.out.println("Done Making The Database. It took " + time.toString());
}

プログラムは、私が実行したケースで実際に機能した場合の約2倍の長さで機能したと報告しています。

ありがとう

4

2 に答える 2

4

System.nanoTime() returns time values in nanoseconds. Time() takes a value in milliseconds as a parameter. This would throw your time value off by a factor of 10^-6.

于 2012-06-12T21:58:18.010 に答える
1

Timeコンストラクターパラメーターとしてミリ秒かかりますが、nanoTime()ナノ秒の精度が得られるので、それが問題になる可能性がありますか?

ここでの議論:System.currentTimeMillisとSystem.nanoTime

于 2012-06-12T21:58:50.927 に答える