(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就是守护线程。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值