多线程一定比单线程快吗

多线程一定比单线程快吗?

我们知道,使用多线程,可以同时执行多个任务,从表面上看,多线程明显是要快于单线程的。但是,多线程的创建,上下文的切换也是需要开销的,所以多线程不一定比单线程快,接下来我们来看一个简单的测试用例。

该测试用例分别使用单线程和多线程进行 a 的递增,b 的递减操作,我们通过控制循环次数,来比较相同次数下,串行和并行所花时间。

public class TimeTest {
    public final int count = 1000000;

    public static void main(String[] args) throws InterruptedException {
        TimeTest timeTest = new TimeTest();
        System.out.println("执行 " + timeTest.count + " 次");
        timeTest.serial();	//串行
        timeTest.parallel();	//并行
    }

    public void serial() {
        int a = 0;
        int b = 0;
        long l = System.currentTimeMillis();
        for (int i = 0; i < count; i++) {
            a++;
        }

        for (int i = 0; i < count; i++) {
            b--;
        }

        System.out.println("串行----->" + (System.currentTimeMillis() - l));
    }

    public void parallel() throws InterruptedException {
        int b = 0;
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                int a = 0;
                for (int i = 0; i < count; i++) {
                    a++;
                }
            }
        });
        long l = System.currentTimeMillis();
        thread.start();
        for (int i = 0; i < count; i++) {
            b--;
        }
        thread.join();	//等thread线程执行完毕再输出时间差
        System.out.println("并行----->" + (System.currentTimeMillis() - l));
    }
}

输出结果:

count100100001000005000001000000
单线程(ms)00224
多线程 (ms)00232

由上表可以发现,执行次数在 50w 次左右,单线程比多线程快,100w 左右,多线程比单线程快,所以,多线程不一定比单线程快。

注:以上测试结果对比可能不太明显,计算时间差时可以使用 System.nanoTime(),单位精确到纳秒级。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值