多线程一定快吗?

来源:互联网 发布:短信矩阵密码 编辑:程序博客网 时间:2024/06/02 11:00
package com.itmyhome.test;/** * 测试并发执行和串行执行的效率 * @author TracyMcGrady *  */public class ConcurrencyTest {private static final long count=100000000;    public static void main(String []args){    try {concurrency();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}    serial();    }    //并发执行    private static void concurrency() throws InterruptedException{    long start=System.currentTimeMillis();    Thread thread=new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stub  int a=0;  for(long i=0;i<count;i++){  a+=5;  //System.out.println("a="+a);  }}});    thread.start();    int b=0;    for(long i=0;i<count;i++){    b--;    //System.out.println("b="+b);    }    //在一个线程中调用thread.join(),将等待thread执行完后才继续本线程。    thread.join();    long time=System.currentTimeMillis()-start;    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);    }}

统计结果如下:


从上表可以看出,当并发执行累加操作不超过1千万次时(也取决于你的机器配置),速度会比串行操作更慢。那么为什么并发执行速度会比串行慢呢?这是因为线程有创建

和上下文的开销。