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?