美文网首页
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