多线程意义

直接上代码     我们来看两个程序 由一个线程和两个线程运行的区别:

单线程(main):

    public static void test(){
        long a = 0;
        long b = 0;
        for(long i = 0; i < 10000000000l; i++){
            a++;
        }
        for(long i = 0; i < 10000000000l; i++){
            b++;
        }
    }

多线程(两个)

public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(() -> {
            long a = 0;
            for(long i = 0; i < 10000000000L;i++){
                a++;
            }
        });

        Thread t2 = new Thread(() -> {
            long b = 0;
            for(long i = 0; i < 10000000000L;i++){
                b++;
            }
        });
        long begin = System.currentTimeMillis();
        t1.start();
        t2.start();

        //等待t1 t2线程都走完 再走main线程
        t1.join();
        t2.join();

        long end = System.currentTimeMillis();
        System.out.println("并发执行时间:"+(end - begin));
        test();
        long end2 = System.currentTimeMillis();
        System.out.println("单线程执行:"+(end2-begin));
    }
}


通过运行结果我们可以看到,两个线程运行时的速度是一个线程运行时速度的差不多三倍

当然我们可能会有疑问:这不是有两个线程嘛,时间咋不是单线程的一半呢

这个问题就涉及到线程的并行和并发的概念

并行:针对于多核cpu,多个处理器能处理多个任务,在物理层面上做到真正的同时进行

并发:针对于单核cpu,单个处理器处理任务,只是由于处理的速度很快,任务好像是同时进行的,其实并不是,只是单个任务在一个时间段内同时进行

了解了这个概念之后,我们就可以回到上面的问题了

所以只有当这两个线程分布在两个cpu上并行执行时,时间才刚好是一半

但是谁能保证只有这段时间内只有并行没有并发呢,所以这个时间就故摸不定了(既有并行,也有并发)


多线程的意义:

多线程在cpu密集型任务时,具有十分大的作用,可以高效地提高程序运行效率,因为可以充分地利用cpu资源,提高程序地运行效率

但这意味着多线程一定就能提高效率吗?

显然过于绝对,多线程是否能提高效率,和下面因素息息相关

1.是否是多核cpu(现在基本上都是多核)

2.现在的cpu核心是否处于空闲状态,如果cpu都已经满载了,这时候你开再多线程也没用

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值