Java并发编程

并发、并行

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

并发执行图
并行执行图

同步、异步

从方法调用的角度来讲:

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

单线程、多线程

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

并发的三大特性

  • 原子性
    一个操作中,cpu不可以中途暂停然后在调度。既不被中断操作,要么全部执行,要么全部不执行。
  • 可见性
    当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看到修改的值。
  • 有序性
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 夜莺2517阅读 127,775评论 1 9
  • 版本:ios 1.2.1 亮点: 1.app角标可以实时更新天气温度或选择空气质量,建议处女座就不要选了,不然老想...
    我就是沉沉阅读 6,994评论 1 6
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,630评论 28 53
  • 兔子虽然是枚小硕 但学校的硕士四人寝不够 就被分到了博士楼里 两人一间 在学校的最西边 靠山 兔子的室友身体不好 ...
    待业的兔子阅读 2,682评论 2 9