多线程一定快吗

来源:互联网 发布:软件测试核心期刊 编辑:程序博客网 时间:2024/06/02 08:34

下面的代码演示串行和并发执行并累加操作的时间,请分析:下面的代码并发执行一定比串行执行快吗?

package chapter01;//并发和单线程执行测试public class ConcurrencyTest { /** 执行次数 */private static final long count=10000l;public static void main(String[] args) throws InterruptedException{concurrency();serial();}//并发计算private static void concurrency() throws InterruptedException{long start=System.currentTimeMillis();Thread thread=new  Thread(new Runnable() {@Overridepublic void run() {int a=0;for(long i=0;i<count;i++){a+=5;}}});thread.start();int b=0;for (long i = 0; i < count; i++) {b--;}long time=System.currentTimeMillis()-start;thread.join();System.out.println("concurrency :" + time + "ms,b=" + b);}//单线程计算private static void serial(){long start=System.currentTimeMillis();int a=0;for(long i=0;i<count;i++){a+=5;}int b=0;for (long i = 0; i < count; i++) {b--;}long time=System.currentTimeMillis()-start;System.out.println("serial:" + time + "ms,b=" + b + ",a=" + a);}}
上述问题的答案是“不一定”,测试结果如表1-1所示。

从表1-1可以发现,当并发执行累加操作不超过百万次时,速度会比串行执行累加操作要慢。那么,为什么并发执行的速度会比串行慢呢?这是因为线程有创建和上下文切换的开销。
注:本文源自《Java并发编程的艺术》一文。