美文网首页
Java并发编程

Java并发编程

作者: _小毛驴 | 来源:发表于2021-04-13 11:13 被阅读0次

    并发、并行

    并发(concurrent):是同一时间应对(dealing with )多件事情的能力。
    并行(parallel):是同一时间动手做(doing)多件事情的能力。
    — Rob Pike

    并发执行图 并行执行图

    同步、异步

    从方法调用的角度来讲:

    • 需要等待结果返回,才能继续运行就是:同步;
    • 不需要等待结果返回,就能继续运行就是:异步。
      注意:同步在多线程中还有另外一层意思,是让多个线程步调一致。

    单线程、多线程

    1. 单核cpu下,多线程不能实际提高程序运行效率。
      多线程只是为了能够在不同的任务之间切换,不同线程轮流使用cpu,不致于一个线程占用cpu,别的线程没法干活。
    2. 多核cpu可以并行跑多个线程,但能否提高程序运行效率还是要分情况的:
      • 有些任务,经过精心设计,将任务拆分,并行执行,当然可以提高程序的运行效率。但不是所有计算任务都能拆分(参考【阿姆达尔定律】)
      • 也不是所有任务都要拆分,任务的目的如果不同,谈拆分和效率没啥意义。
    3. IO操作不占用cpu,只是我们一般拷贝文件使用的是【阻塞IO】,这时相当于线程虽然不用cpu,但需要等待IO结束,没能充分利用线程,所有才有后面的【非阻塞IO】和【异步IO】优化。

    并发的三大特性

    • 原子性
      一个操作中,cpu不可以中途暂停然后在调度。既不被中断操作,要么全部执行,要么全部不执行。
    • 可见性
      当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看到修改的值。
    • 有序性

    相关文章

      网友评论

          本文标题:Java并发编程

          本文链接:https://www.haomeiwen.com/subject/oukqkltx.html