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

代码如下:publicclassThreadBodyimplementsRunnable{publicvoidrun(){for(inti=1;i<500000000;i... 代码如下:

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毫秒
//多线程结束
}
展开
 我来答
zhuqdcuit
2014-11-25 · TA获得超过276个赞
知道答主
回答量:85
采纳率:0%
帮助的人:48万
展开全部
  1. 单线程比多线程更快。你的测试代码只是用了CPU资源。因为多线程需要处理线程的开销,开销多了自然没有单线程快。

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

追问
确实,如果执行方法体改为读取一个文件,执行结果为:
end1:1416901673383 毫秒数:153
end2:1416901673404 毫秒数:21
鲸鱼爸爸
2014-11-25 · TA获得超过472个赞
知道小有建树答主
回答量:614
采纳率:0%
帮助的人:426万
展开全部
就好像 包子放在一个碗里,一个人吃完一个包子和20个人吃完20个包子 谁快?
你得把任务分解到多个线程呀~
追问
很困惑哇,能上代码不?
追答
就是单个任务的消耗时间少于初始化线程需要的时间。
好比吃一个包子跟从碗里拿一个包子的时间差不多。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式