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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

参考技术A 就好像 包子放在一个碗里,一个人吃完一个包子和20个人吃完20个包子 谁快?
你得把任务分解到多个线程呀~追问

很困惑哇,能上代码不?

追答

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

以上是关于Java 多线程和单线程效率比较,最好是能上代码,我使用了多线程发现耗时更多,求大神解释!的主要内容,如果未能解决你的问题,请参考以下文章

多线程和多进程效率的对比

java 多线程问题 真的提高了效率吗?

Redis 安装

Python 多线程效率不高吗

多线程一定好吗?

进程and线程and协程效率对比