Java 多线程和单线程效率比较,最好是能上代码,我使用了多线程发现耗时更多,求大神解释!

代码如下:

public class ThreadBody implements Runnable {
public void run() {
for (int i = 1; i < 500000000; i++) {
}
}

public void runSingleThread() {
for (int i = 1; i < 500000000; i++) {
}
}
}

//效率测试代码
public static void main(String[] args) {
//单线程开始
Long start1 = System.currentTimeMillis();
System.out.println("start1:"+start1);
for(int i = 0;i<20;i++)
{
ThreadBody threadBody = new ThreadBody();
threadBody.runSingleThread();
}
Long end1 = System.currentTimeMillis();
System.out.println("end1:"+end1+" 毫秒数:"+(end1-start1));//2毫秒
//单线程结束

//多线程开始
Long start2 = System.currentTimeMillis();
System.out.println("start2:"+start2);
BlockingQueue<Runnable> queue = new LinkedBlockingDeque<Runnable>();
ThreadPoolExecutor executor = new ThreadPoolExecutor(3,6,1,TimeUnit.HOURS,queue);

ThreadBody threadBody = new ThreadBody();
for(int i = 0;i<20;i++)
{
executor.execute(threadBody);
}
Long end2 = System.currentTimeMillis();
System.out.println("end2:"+end2+" 毫秒数:"+(end2-start2));//4毫秒
//多线程结束
}

    单线程比多线程更快。你的测试代码只是用了CPU资源。因为多线程需要处理线程的开销,开销多了自然没有单线程快。

    多线程是为了更充分的利用计算机的资源。比如网络,IO,CPU...如果你在for循环里加入一个磁盘写入操作,多线程就会比单线程快了

追问

确实,如果执行方法体改为读取一个文件,执行结果为:
end1:1416901673383 毫秒数:153
end2:1416901673404 毫秒数:21

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-11-25
就好像 包子放在一个碗里,一个人吃完一个包子和20个人吃完20个包子 谁快?
你得把任务分解到多个线程呀~追问

很困惑哇,能上代码不?

追答

就是单个任务的消耗时间少于初始化线程需要的时间。
好比吃一个包子跟从碗里拿一个包子的时间差不多。

相似回答