如何使用Java程序测量UNIX/Linux系统上上下文切换的速度

如何使用Java程序测量UNIX/Linux系统上上下文切换的速度,java,multithreading,thread-safety,Java,Multithreading,Thread Safety,我需要衡量线程上下文切换我写在下面的程序是正确的方式,请让我知道,并希望得到这篇文章的更新。 任何人都可以帮忙 /** 下面是我正在尝试的程序,这是一种正确的方法。 */ 公共类JavaContextSwitch{ 最终静态对象ob=新对象(); 最终静态int numberOFThread=10; 最终静态MyThread[]线程数组=新的MyThread[numberOFThread]; 公共静态void main(字符串args[])引发InterruptedException{ long

我需要衡量线程上下文切换我写在下面的程序是正确的方式,请让我知道,并希望得到这篇文章的更新。 任何人都可以帮忙

/** 下面是我正在尝试的程序,这是一种正确的方法。 */

公共类JavaContextSwitch{
最终静态对象ob=新对象();
最终静态int numberOFThread=10;
最终静态MyThread[]线程数组=新的MyThread[numberOFThread];
公共静态void main(字符串args[])引发InterruptedException{
long mainThreadStart=System.nanoTime();

对于(int i=0;我不认为任何与Java相关的东西;由操作系统决定运行什么、何时运行,以及“什么”可能是您的线程之一或运行系统上的任何其他进程。如果您想测量上下文切换时间,请编写一个程序只有上下文切换。两个线程循环,在两个信号灯上交换一个单元就可以了。让线程循环,比如说,50000000次。在一个不忙的系统上运行。用秒表计时。将时间除以50000000。我看到了更多的帮助,如果有人能建议或给出java示例,我会很高兴,如果上面的程序java是C++ C++语言的一种测试方法,它不是正确的方法来测量上下文切换。正确的方法来测量上下文切换不是使用java。得到它。在C或C++中编写测试。我不知道C和C++需要用java写什么。希望你能理解我的问题。我不认为Java有什么关系;决定OS的运行是由OS决定的。ndwhen,以及“what”可能是正在运行的系统上的一个线程或任何其他进程只有上下文切换。两个线程循环,在两个信号灯上交换一个单元就可以了。让线程循环,比如说,50000000次。在一个不忙的系统上运行。用秒表计时。将时间除以50000000。我看到了更多的帮助,如果有人能建议或给出java示例,我会很高兴,如果上面的程序AM是不是正确的方法来获取上下文切换Time.LaxMang--正确的上下文切换方法不是使用java。得到它?在C++或C++中编写测试。我不知道C和C++需要用java编写。希望你能理解我的问题。
public class JavaContextSwitch {
    final static Object ob = new Object();
    final static int numberOFThread=10;
    final static MyThread []threadArray =new MyThread[numberOFThread];
    public static void main(String args[]) throws InterruptedException{

        long mainThreadStart=System.nanoTime();

        for(int i=0;i<numberOFThread;i++){
            threadArray[i]= new JavaContextSwitch.MyThread(numberOFThread);
            threadArray[i].setPriority(Thread.MAX_PRIORITY);
            threadArray[i].start();
            threadArray[i].join();
        }
        System.out.println("All Thread is relaase for job and witing ..");
        //Thread.currentThread().join();

        System.out.println("Waiting is over ");
        long endOfMainThread= System.nanoTime();
        System.out.println("Total time taken is "+(endOfMainThread-mainThreadStart));
        long sum=0;
        for(int i=0;i<numberOFThread;i++){
            long timeTaken=  threadArray[i].timefinish-threadArray[i].startTime;
            System.out.println("Each thread running time "+timeTaken);
            sum=sum+timeTaken;
        }
        System.out.println("Total time taken by thread is "+sum);
        System.out.println("Average "+numberOFThread+" Taken "+(sum/numberOFThread)+" Time ");
        long timeForContextSwitch= (endOfMainThread-mainThreadStart)-sum;
        System.out.println(" Context switch time is "+timeForContextSwitch);
        System.out.println(" Average Context witching "+ (timeForContextSwitch/numberOFThread+1));
    }

    private static class MyThread extends Thread {
        public long startTime;
        public long timefinish;
        int cycle = 0;

        public MyThread(int cycle) {
            this.cycle = cycle;
        }

        public void run() {
            System.out.println(" Child thread started"+this.getId());
            startTime=System.nanoTime();
            // Child thread is busy to complete their job.
                for (int i = 0; i < cycle; i++) {
                for (int j = 0; j < 640 * 81; j++)
                    timefinish = System.nanoTime();
            }
                System.out.println("I am done now "+this.getId());
        }

    }
}