Java:如何在多线程程序中测试细粒度

时间:2013-09-21 20:56:18

标签: java multithreading

在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个线程并计算计算每个线程所花费的时间。然后我将比较时间:通过t1t2注意它们,如果|t1 - t2| < small epsilon,我会说我的算法在某些给定条件下以精细粒度执行,即花费的时间线程是相对相同的。

如何衡量线程的时间?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

在Run方法中添加时序逻辑