(2021-02-04)并发编程简介-并发编程(1)
关于并发编程,不光是面试经常问到,在实际的操作过程中,也会经常用到。所以一来是为了加深自己的印象,二来也希望能和大家公共学习。不对的地方请斧正,谢谢!
1、程序、进程、线程的关联和区别?
这是个老生常谈的问题了。很多公司的笔试题都会考这个问题,下面来简单分析下
程序:程序是什么,举个例子,你经常玩的吃鸡、LOL就是程序(含有指令与数据的文件)
进程:先说概念,进程就是程序运行资源分配的最小单位。你双击运行程序,就会产生一个进程。
线程:概念:CPU调度的最小单位,存在于进程当中。你运行的游戏中就会有很多个线程,执行不同的工作。音乐、显示等。
运用多线程的好处:充分的利用cpu资源。但是并不是任何时候多线程都比单线程更节约时间。上下文切换也比较耗时。
JDK的线程是协作式,不是抢占式!!!
2、并发和并行?
并发:交替执行不同的任务
并行:同时执行不同的任务
就像告诉公路一样。并发就是单车道,车辆需要排队的跑。并行就是多车道。
这里需要注意一下,谈论并发的时候一定要加上单位时间,否则的话将毫无意义。比如说,单位时间内的并发量是多少。
3、创建线程的几种方式?
这也是个面试官经常问到的问题,两种还是3种?
从代码上看,其实有三种。Thread、Runnbale、Callable。
但是如果从官方文档来讲,就只有两种,
There are two ways to create a new thread of execution.//这句话是Thread.class中73行所写。官方承认只有两种!
其中Thread是对线程的抽象,Runnable是对任务的抽象。并且,Thread类也是实现了Runnable接口。
4、线程的生命周期
新建状态,就绪状态,运行状态,阻塞状态,死亡状态(5种)
线程中断:
在之前的jdk版本中,中断会有stop(),destory()等方法。但是线程不建议使用了,为什么?因为这些方法非常的暴力,调用后不会释放线程所占有的资源!
在当前的JDK版本中,是使用interrupt()方法,但是这里并发强制性的。调用该方法之后,会让线程自己进行中断,而不是调用了马上进行中断,让出资源。
在方法中,也不要使用true或者false来直接判断当前线程是否中断。因为run方法中有阻塞调用时,无法很快的检测到取消标识。线程必须从阻塞调用后才会去检查这个取消标识。
什么是阻塞方法:
1、sleep()方法,支持中断检查
注意:处于死锁的线程无法被中断
join():让当前线程获得CPU的执行权
yeild():让当前线程让出CPU执行权,进入就绪状态。
wait():当前线程等待,并且释放当前对象锁(只有wait会释放当前对应锁)
notify():让一个当前等待的线程变成就绪状态
notifyAll():让所有的线程变成就绪状态
说到wait和notify就不得不说一下,等待通知范式:
什么是等待通知范式,等待(wait),通知(notify)
注意:等待和通知的调用都要放在锁当中调用(都需要先获得锁)
例子:
synchronized(this){
wait();//notify()
}
这里推荐一个比较经典的笔试题:子弹上膛/射击
这里说一下什么是守护线程
守护线程就是:用于后台调度以及支持性功能,GC就是守护线程。
(2021-02-04)并发编程简介-并发编程(1)相关推荐
- 2021.02.04 Visual QA论文阅读
目录 [2016][CVPR] Where To Look: Focus Regions for Visual Question Answering [2016][CVPR] Yin and Yang ...
- 2021.02.04——用爬虫爬取nga ow区1-10页的帖子并生成词云图
前言 最近在学习爬虫的相关知识,思考做一个案例,平常nga ow区逛的也挺多,就爬取一下前10页帖子的标题,并以此生成词云图吧! 查阅相关链接 词云的简单实现 爬取网站多页数据实现方法 静态爬取方法 ...
- 【每日一知】带你走近5nm芯片 (2021.02.05 )
[每日一知]带你走近5nm芯片 (2021.02.05 ) [每日一知]带你走近5nm芯片 (2021.02.05 ) ==一.简介== ==二.优势== ==三.现状== ============= ...
- Akka框架——第一节:并发编程简介
本节主要内容: 1. 重要概念 2. Actor模型 3. Akka架构简介 多核处理器的出现使并发编程(Concurrent Programming)成为开发人员必备的一项技能,许多现代编程语言都致 ...
- Java并发编程简介
并发编程简介 1. 什么是并发编程 所谓并发编程是指在一台处理器上"同时"处理多个任务.并发是在在同一实体上的多个事件.多个事件在同一时间间隔发生. 并发编程 ①从程序设计的角度来 ...
- Python并行和并发编程简介
通常,Python是用于数据处理和数据科学的最受欢迎的语言之一. 该生态系统提供了许多促进高性能计算的库和框架. 不过,在Python中进行并行编程可能会非常棘手. 在本教程中,我们将研究为什么并行性 ...
- 并发编程-15并发容器(J.U.C)核心 AbstractQueuedSynchronizer 抽象队列同步器AQS介绍
文章目录 J.U.C脑图 J.U.C核心AQS简介 AQS底层数据结构 AQS特点 J.U.C脑图 为了体现出AQS和线程池的重要性,上图单独将AQS和线程池拿出来了. J.U.C的构成如下: J.U ...
- rust异步编程--理解并发/多线程/回调/异步/future/promise/async/await/tokio
1. 异步编程简介 通常我们将消息通信分成同步和异步两种: 同步就是消息的发送方要等待消息返回才能继续处理其它事情 异步就是消息的发送方不需要等待消息返回就可以处理其它事情 很显然异步允许我们同时做更 ...
- C#并发编程-1 并发编程概述
一 并发编程简介 1.1 关于并发和并行 并发和并行的概念: 并发:(Concurrent),在某个时间段内,如果有多个任务执行,即有多个线程在操作时,如果系统只有一个CPU,则不能真正同时进行一个以 ...
最新文章
- 微生物组—宏基因组分析专题培训7月开课啦!北京
- mysql导入数据出现Errcode: 2 - No such file or directory错误信息
- java随机数去重排序_数组去重及排序/0~10随机数字/字符串中出现最多的字符及次数...
- pip在安装模块时提示Read timed out
- 安装JDK时提示 IllegalArgumentException:Invalid characters in hostname的解决方法
- delphi里用java_如何在整个Delphi应用程序中使用ID
- java 10大常见异常
- 12096 - The SetStack Computer
- 接口自动化测试框架搭建(8、发送邮件方法的封装+HTMLTestRunnerCN)--python+HTMLTestRunnerCN+request+unittest+mock+db
- oracle实施过程中误区,oracle 开发误区探索《二》
- TinyPXE网络启动,打造无盘工作站
- 黄花机场过夜停车场收费标准,黄花机场停车场过夜多少钱一天
- c语言做线性代数第六版答案,编程与线性代数
- 7723java乐高,乐高EV3——lejos(一)
- 弱电智能化施工组织设计方案
- 重庆兴渝计算机培训中心,重庆兴渝职业中等专业学校2021招生录取分数线
- GitHub的Fork 是什么意思?『举了个挺不错的例子,程序员Joe』
- 电商网站产品结构数据库设计
- 使用Eclipse WTP进行快速Web开发
- 幼儿园计算机技能大赛,幼儿园新教师五项技能比赛
热门文章
- 利用网络劫持解决微信远程真机调试Api问题
- i7第8代处理器安装linux,八代处理器安装黑苹果 关于本机显示“未知”解决办法...
- ubuntu18.04安装opencv with ffmpeg和java
- 打开目录报错:Stale file handle
- 二、iOS 逆向:砸壳ipa
- 鸿蒙之初彩蛋攻略,神都夜行录鸿蒙之境开明boss机制讲解 boss开明打法阵容攻略[多图]...
- Python与PHP有何区别
- 红外成像和可见光---双光集成设备的介绍
- EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器前端源码重构(三)- webpack + vue + AdminLTE 多页面引入 element-ui
- 普洱熟茶和普洱生茶究竟哪个对身体更好?