关于并发编程,不光是面试经常问到,在实际的操作过程中,也会经常用到。所以一来是为了加深自己的印象,二来也希望能和大家公共学习。不对的地方请斧正,谢谢!

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)相关推荐

  1. 2021.02.04 Visual QA论文阅读

    目录 [2016][CVPR] Where To Look: Focus Regions for Visual Question Answering [2016][CVPR] Yin and Yang ...

  2. 2021.02.04——用爬虫爬取nga ow区1-10页的帖子并生成词云图

    前言 最近在学习爬虫的相关知识,思考做一个案例,平常nga ow区逛的也挺多,就爬取一下前10页帖子的标题,并以此生成词云图吧! 查阅相关链接 词云的简单实现 爬取网站多页数据实现方法 静态爬取方法 ...

  3. 【每日一知】带你走近5nm芯片 (2021.02.05 )

    [每日一知]带你走近5nm芯片 (2021.02.05 ) [每日一知]带你走近5nm芯片 (2021.02.05 ) ==一.简介== ==二.优势== ==三.现状== ============= ...

  4. Akka框架——第一节:并发编程简介

    本节主要内容: 1. 重要概念 2. Actor模型 3. Akka架构简介 多核处理器的出现使并发编程(Concurrent Programming)成为开发人员必备的一项技能,许多现代编程语言都致 ...

  5. Java并发编程简介

    并发编程简介 1. 什么是并发编程 所谓并发编程是指在一台处理器上"同时"处理多个任务.并发是在在同一实体上的多个事件.多个事件在同一时间间隔发生. 并发编程 ①从程序设计的角度来 ...

  6. Python并行和并发编程简介

    通常,Python是用于数据处理和数据科学的最受欢迎的语言之一. 该生态系统提供了许多促进高性能计算的库和框架. 不过,在Python中进行并行编程可能会非常棘手. 在本教程中,我们将研究为什么并行性 ...

  7. 并发编程-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 ...

  8. rust异步编程--理解并发/多线程/回调/异步/future/promise/async/await/tokio

    1. 异步编程简介 通常我们将消息通信分成同步和异步两种: 同步就是消息的发送方要等待消息返回才能继续处理其它事情 异步就是消息的发送方不需要等待消息返回就可以处理其它事情 很显然异步允许我们同时做更 ...

  9. C#并发编程-1 并发编程概述

    一 并发编程简介 1.1 关于并发和并行 并发和并行的概念: 并发:(Concurrent),在某个时间段内,如果有多个任务执行,即有多个线程在操作时,如果系统只有一个CPU,则不能真正同时进行一个以 ...

最新文章

  1. 微生物组—宏基因组分析专题培训7月开课啦!北京
  2. mysql导入数据出现Errcode: 2 - No such file or directory错误信息
  3. java随机数去重排序_数组去重及排序/0~10随机数字/字符串中出现最多的字符及次数...
  4. pip在安装模块时提示Read timed out
  5. 安装JDK时提示 IllegalArgumentException:Invalid characters in hostname的解决方法
  6. delphi里用java_如何在整个Delphi应用程序中使用ID
  7. java 10大常见异常
  8. 12096 - The SetStack Computer
  9. 接口自动化测试框架搭建(8、发送邮件方法的封装+HTMLTestRunnerCN)--python+HTMLTestRunnerCN+request+unittest+mock+db
  10. oracle实施过程中误区,oracle 开发误区探索《二》
  11. TinyPXE网络启动,打造无盘工作站
  12. 黄花机场过夜停车场收费标准,黄花机场停车场过夜多少钱一天
  13. c语言做线性代数第六版答案,编程与线性代数
  14. 7723java乐高,乐高EV3——lejos(一)
  15. 弱电智能化施工组织设计方案
  16. 重庆兴渝计算机培训中心,重庆兴渝职业中等专业学校2021招生录取分数线
  17. GitHub的Fork 是什么意思?『举了个挺不错的例子,程序员Joe』
  18. 电商网站产品结构数据库设计
  19. 使用Eclipse WTP进行快速Web开发
  20. 幼儿园计算机技能大赛,幼儿园新教师五项技能比赛

热门文章

  1. 利用网络劫持解决微信远程真机调试Api问题
  2. i7第8代处理器安装linux,八代处理器安装黑苹果 关于本机显示“未知”解决办法...
  3. ubuntu18.04安装opencv with ffmpeg和java
  4. 打开目录报错:Stale file handle
  5. 二、iOS 逆向:砸壳ipa
  6. 鸿蒙之初彩蛋攻略,神都夜行录鸿蒙之境开明boss机制讲解 boss开明打法阵容攻略[多图]...
  7. Python与PHP有何区别
  8. 红外成像和可见光---双光集成设备的介绍
  9. EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器前端源码重构(三)- webpack + vue + AdminLTE 多页面引入 element-ui
  10. 普洱熟茶和普洱生茶究竟哪个对身体更好?