1

在 Java 中,我有简单的多线程代码:

public class ThreadedAlgo {

    public static final int threadsCount = 3;

    public static void main(String[] args) {

        // start timer prior computation
        time = System.currentTimeMillis();

        // create threads
        Thread[] threads = new Thread[threadsCount];

        class ToDo implements Runnable {
            public void run() { ... }
        }

        // create job objects
        for (int i = 0; i < threadsCount; i++) {
            ToDo job = new ToDo();
            threads[i] = new Thread(job);
        }

        // start threads
        for (int i = 0; i < threadsCount; i++) {
            threads[i].start();
        }

        // wait for threads above to finish
        for (int i = 0; i < threadsCount; i++) {
            try {
                threads[i].join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        // display time after computation
        System.out.println("Execution time: " + (System.currentTimeMillis() - time));

    }

}

它工作正常,现在我想为 2 或 3 个线程运行它并计算每个线程的计算时间。然后我将比较时间:用t1和记下它们t2,如果|t1 - t2| < small epsilon,我会说我的算法在某些给定条件下以细粒度执行,即线程花费的时间相对相同。

如何测量线程的时间?

4

2 回答 2

0

System.nanoTime()在线程(作业)的开头和结尾使用方法来计算每次调用所花费的总时间。在您的情况下,所有线程都将以相同的(默认)优先级执行,其中时间片应该分配得相当公平。如果你的线程是互锁的,出于同样的原因使用“公平锁”;例如new ReentrantLock(true);

于 2013-09-21T21:02:57.197 回答
0

在 Run 方法中添加计时逻辑

于 2013-09-21T21:03:25.657 回答