I want to check whether multithreading is faster than single thread,then I make a demo here:
public class ThreadSpeedTest {
    /**
     * @param args
     */
    public static void main(String[] args) {
        System.out.println("cpu number:"
                + Runtime.getRuntime().availableProcessors());
        singleThreadStart();
//      secondThreadStart();
//      fiveThreadStart();
    }
    private static void sum() {
        long sum = 0;
        for (int i = 0; i < 1000000; i++) {
            sum += i;
        }
        System.out.println(sum);
    }
    private static void singleThreadStart() {
        new Thread(new Runnable() {
            public void run() {
                long start = System.nanoTime();
    //          sum();
    //          sum();
    //          sum();
                sum();
                sum();
                long end = System.nanoTime();
                System.out.println("cost time:" + (end - start));
            }
        }).start();
    }
    private static void secondThreadStart() {
        long start = System.nanoTime();
        Thread thread1 = new Thread(new Runnable() {
            public void run() {
                sum();
            }
        });
        thread1.start();
        Thread thread2 = new Thread(new Runnable() {
            public void run() {
                sum();
            }
        });
        thread2.start();
        try {
            thread1.join();
            thread2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        long end = System.nanoTime();
        System.out.println("cost time:" + (end - start));
    }
    private static void fiveThreadStart() {
        long start = System.nanoTime();
        Thread thread1 = new Thread(new Runnable() {
            public void run() {
                sum();
            }
        });
        thread1.start();
        Thread thread2 = new Thread(new Runnable() {
            public void run() {
                sum();
            }
        });
        thread2.start();
        Thread thread3 = new Thread(new Runnable() {
            public void run() {
                sum();
            }
        });
        thread3.start();
        Thread thread4 = new Thread(new Runnable() {
            public void run() {
                sum();
            }
        });
        thread4.start();
        Thread thread5 = new Thread(new Runnable() {
            public void run() {
                sum();
            }
        });
        thread5.start();
        try {
            thread1.join();
            thread2.join();
            thread3.join();
            thread4.join();
            thread5.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        long end = System.nanoTime();
        System.out.println("cost time:" + (end - start));
    }
}
First I run singleThreadStart with two sum method,the result is
cpu number:4
499999500000
499999500000
cost time:6719000
Then I run secondThreadStart,the result is
cpu number:4
499999500000
499999500000
cost time:14299000
Then I run singleThreadStart with five sum method,the result is
cpu number:4
499999500000
499999500000
499999500000
499999500000
499999500000
cost time:10416000
Finally I run fiveThreadStart,the result is
cpu number:4
499999500000
499999500000
499999500000
499999500000
499999500000
cost time:15708000
My questions are:
- SecondThreadStart cost more time than singleThreadStart, is it because the cost of creating thread?
- The cpu number is 4, despite the cost of creating thread, so would using more than 4 thread be slower than using four threads?
- If I want to do something that takes much more time, is using four threads to do is best?
 
     
     
     
    