1. 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。其中两种并发关系分别是同步和互斥;

2. 互斥:进程间相互排斥的使用临界资源的现象,就叫互斥。

3. 同步:进程之间的关系不是相互排斥临界资源的关系,而是相互依赖的关系。进一步的说明:就是前一个进程的输出作为后一个进程的输入,当第一个进程没有输出时第二个进程必须等待。具有同步关系的一组并发进程相互发送的信息称为消息或事件。
其中并发又有伪并发和真并发,伪并发是指单核处理器的并发,真并发是指多核处理器的并发。

4. 并行:在单处理器中多道程序设计系统中,进程被交替执行,表现出一种并发的外部特种;在多处理器系统中,进程不仅可以交替执行,而且可以重叠执行。在多处理器上的程序才可实现并行处理。从而可知,并行是针对多处理器而言的。并行是同时发生的多个并发事件,具有并发的含义,但并发不一定并行,也亦是说并发事件之间不一定要同一时刻发生。

5. 多线程:多线程是程序设计的逻辑层概念,它是进程中并发运行的一段代码。多线程可以实现线程间的切换执行。

异步和多线程并不是一个同等关系,异步是最终目的,多线程只是我们实现异步的一种手段。异步是当一个调用请求发送给被调用者,而调用者不用等待其结果的返回而可以做其它的事情。实现异步可以采用多线程技术或则交给另外的进程来处理。

举例如下:
在一段时间内,我要做如下三件事情:做饭、洗衣服、做俯卧撑100下;
1、 烧开水(10分钟):准备烧开水1分钟,等水烧开8分钟,收拾烧水用具1分钟;
2、做饭(13分钟):准备做饭1分钟,等饭做好10分钟,收拾做饭用具2分钟;
3、 做俯卧撑(10分钟):做俯卧撑100下,10分钟;

一个线程的做法:
一、单核情况下
1、同步:
花费10+13+10=33分钟
2、异步:
在一件事情完成的间隙,我们可以去做别的事情。

花费15分钟
二、在双核情况下
1、异步 并行
核1(10分钟):准备烧开水(1分钟)+做俯卧撑50下(5分钟)+等待3分钟+收拾烧水用具(1分钟);
核2(13分钟):准备做饭(1分钟)+做俯卧撑50个(5分钟)+等待5分钟+收拾做饭用具(2分钟);
花费13分钟
2、异步 非并行
核1(10分钟):做俯卧撑100下(10分钟;

核2(14分钟):准备烧开水(1分钟)+准备做饭(1分钟)+等待7分钟+收拾烧水用具(1分钟)+等待2分钟+收拾做饭用具(2分钟); 花费14分钟

多线程的做法:
一、单核情况下:
线程1:准备烧开水(1分钟)、sleep8分钟、收拾烧水用具(1分钟)、exit;
线程2:sleep1分钟、准备做饭(1分钟)、sleep10分钟、收拾做饭用具(2分钟)、exit;
线程3:sleep2分钟、做俯卧撑70下(7分钟)、sleep1分钟、做俯卧撑20下(2分钟),sleep2分钟、做俯卧撑10下(1分钟)、exit;
花费15分钟 和异步是一样的。但实际上是不一样的,因为线程不会按照我们设想的去跑, 如果线程3 举杠铃先跑,整个流程的速度就慢下来了。

总结:
1、异步和同步的区别, 在io等待的时候,同步不会切走,浪费了时间。

2、如果都是独占cpu 的业务, 比如做俯卧撑的业务, 在单核情况下 多线程和单线程没有区别。

3、 多线程的好处,比较容易的实现了异步切换的思想, 因为异步的程序很难写的。多线程本身还是以同步完成,但是应该说比效率是比不上异步的。 而且多线很容易写, 相对效率也高。

4、多核的好处,就是可以同时做事情, 这个和单核完全不一样的。

【Java线程】互斥 同步 异步 并发 多线程的区别与联系相关推荐

  1. 进程线程、同步异步、阻塞非阻塞、并发并行、多线程

    一: 进程和线程 1: 进程(Process) 是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源.一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或多个线程.线 ...

  2. 进程线程、同步异步、阻塞非阻塞、并发并行

    一.进程和线程 1️⃣[进程Process]是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源.一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或多个线程. 进程 ...

  3. 15分钟读懂进程线程、同步异步、阻塞非阻塞、并发并行,太实用了!

    作者:Martin cnblogs.com/mhq-martin/p/9035640.html 基本概念 1 进程和线程 进程(Process): 是Windows系统中的一个基本概念,它包含着一个运 ...

  4. 15分钟读懂进程线程、同步异步、阻塞非阻塞、并发并行

    基本概念 1 进程和线程 进程(Process): 是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源.一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或多个线程 ...

  5. 同步异步单线程多线程初级理解

    对于我开始接触同步异步单线程多线程的概念的时候,都是分别理解同步和异步.单线程和多线程概念,当看到"使用同步方法保证线程安全"时愚昧的理解为那就是单线程咯:于是就陷入了困惑,同步等 ...

  6. java线程看不进去_Java多线程和并发基础面试问答,看过后你不会后悔

    第一:Java多线程面试问题 1:过程和线程之间有什么不合? 一个过程是一个自力(self contained)的运行情况,它可以被看作一个法度榜样或者一个应用.而线程是在过程中履行的一个义务.Jav ...

  7. java 线程假醒_Java并发基础05. 传统线程同步通信技术

    先看一个问题: 有两个线程,子线程先执行10次,然后主线程执行5次,然后再切换到子线程执行10,再主线程执行5次--如此往返执行50次. 看完这个问题,很明显要用到线程间的通信了, 先分析一下思路:首 ...

  8. Java线程的同步和异步的区别

    1. 同步与异步 多线程并发时,多个线程同时请求同一个资源,必然导致此资源的数据不安全,A线程修改了B线 程的处理的数据,而B线程又修改了A线程处理的数理.显然这是由于全局资源造成的,有时为了解 决此 ...

  9. GIL , 线程池 , 同步 , 异步 , 队列 , 事件

    一.什么是GIL 官方解释: ''' In CPython, the global interpreter lock, or GIL, is a mutex that prevents multipl ...

最新文章

  1. mxnet nd中的asscalar() 向量转换为标量 转
  2. spring bean scope作用域及多线程安全问题场景分析
  3. android 回调函数二:应用实例
  4. php smtp 超时,SMTP错误:无法连接到服务器:连接超时(110)与PHPMailer和Outlook SMTP
  5. 向量距离计算 java_Milvus 向量搜索引擎开源了!
  6. 什么叫预判_什么才是真正的用户画像?
  7. 合并两个有序数组(双/三指针)
  8. python 3.* + Eclipse mar.2 +pydev 5.0 环境搭建
  9. 在linux怎样删除文件夹里,linux删除文件夹(里头有文件)
  10. PCL之平面分割模型
  11. 从高德地图获取城市地铁线路+站点
  12. 一键保存网页为PDF
  13. android apk参数错误,Android adb安装apk时出现报错Invalid APK file如何解决
  14. 【分享】如何自动同步企业微信外部客户信息到CRM系统?
  15. 【DEBUG】OMAPL138 Connect to PRSC failed
  16. 图解Java多线程设计模式——Java多线程基础
  17. 【机器学习】之 主成分分析PCA
  18. 一点就分享系列(实践篇3-中篇)— 虽迟但到!全网首发?yolov5之“baseline修改小结“+“CV领域展开-Involutiontransformercnn”
  19. html蔡徐坤邀请你打篮球源码,蔡徐坤给IKUN“讲笑话”,想邀请粉丝打篮球,网友:你打球像...
  20. Linux 文字转语音

热门文章

  1. __doPostBack用法 【csdn】
  2. sp_addlinkedserver (Transact-SQL)
  3. Linux Shell常用技巧(四)
  4. TextWatcher() 的用法
  5. Android错误-error:Foundtextwhereitemtagisexpected
  6. C++读取文件夹中所有文件的路径,包含子文件夹
  7. 【转】路由转发过程的IP及MAC地址变化
  8. github搭建个人博客 hexo d无效
  9. CMS(Concurrent Mark-Sweep)垃圾回收器
  10. 开多个bitset和bitset的基本使用