当前位置: 首页 > wzjs >正文

四川建设工程网站餐饮培训

四川建设工程网站,餐饮培训,凡科做商品网站的教学视频,怎样做动态网站一、线程和进程 1、线程和进程的定义 进程:是资源分配的最小单位,是指计算机中正在运行的一个实例,如你打开了浏览器就是打开了一个进程。线程:是程序运行的最小单位。一个进程中包含多个线程,他们可以共享进程的进程…

一、线程和进程

1、线程和进程的定义

  • 进程:是资源分配的最小单位,是指计算机中正在运行的一个实例,如你打开了浏览器就是打开了一个进程。
  • 线程:是程序运行的最小单位。一个进程中包含多个线程,他们可以共享进程的进程的资源比如内存空间、文件句柄等。

2、线程和进程的区别

  • 进程是正在运行程序的实例,进程中包含了线程,每个线程执行不同的任务
  • 不同的进程使用不同的内存空间,在当前进程下的所有线程可以共享内存空间
  • 线程更轻量,切换成本一般比进程低

3、创建线程

(1)Q:创建线程的方式有哪些?

  • 继承Thread类
  • 实现runnable接口
  • 实现callable接口
  • 从线程池中创建(项目中使用方式)

(2)Q:runnable和callable的区别?

  • Runnable接口run方法没有返回值;而callable接口call方法有返回值
  • callable接口的call方法允许抛出异常;而runnable接口的run方法的异常只能在内部消化,不能继续网上抛

(3)Q:run()和start()的区别?

  • start()用来启动线程,只能被调用一次
  • run()封装了要被线程执行的代码,可以被调用多次

4、线程的状态

(1)Q:线程包括哪些状态?

新建(NEW)、可运行(RUNNABLE)、阻塞(BLOCKED)、等待(WAITING)、时间等待(TIMED_WAITING)、终止(TERMINATED)

(2)线程之间的状态是如何变化的?

(3)Q:notify()和notifyAll()有什么区别?

  •  notify():随机唤醒一个wait的线程
  • notifyAll():唤醒所有wait线程

(4)Q:wait()方法和sleep()方法有什么区别?

共同点:都是让当前的线程暂时放弃CPU使用权,进入阻塞状态

不同点:

  • 方法归属不同:sleep是静态方法,而wait是Object成员方法,每个对象都有
  • 醒来时机不同:sleep和wait(long)在等待对应毫秒后醒来,但wait()方法如果不唤醒会一直等待
  • 锁特性不同(重点):wait方法调用必须先获取wait对象锁,但sleep不用;wait方法执行后会释放锁,别的线程还能用,但sleep在沉睡期间是不会释放锁的,其他线程也被阻塞。

二、并行和并发

1、并行和并发有什么区别?

在多核CPU下

  • 并发是指同一时间下应对多项事情的能力(微观上是串行的),如多个线程轮流使用1个或多个CPU
  • 并行是指在同一时间下动手做多项事情的能力(也可以说同一时刻),如4核CPU同时执行4个线程

2、Synchronized关键字的底层原理

 Synchronized采用互斥的方式让同一时刻最多只有一个线程能持有对象锁

Synchronized的底层是由monitor实现的,monitor是jvm级别的对象,线程获得锁需要使用对象锁关联monitor,下图展示了monitor的组成

3、死锁

 死锁(Deadlock)描述的是这样一种情况:多个进程/线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于进程/线程被无限期地阻塞,因此程序不可能正常终止。

(1)Q:死锁产生的必要条件?

  • 互斥:资源必须处于非共享模式,即一次只有一个进程可以使用。如果另一进程申请该资源,那么必须等待直到该资源被释放为止。
  • 占有并等待:一个进程至少应该占有一个资源,并等待另一资源,而该资源被其他进程所占有。
  • 非抢占:资源不能被抢占。只能在持有资源的进程完成任务后,该资源才会被释放。
  • 循环等待:有一组等待进程 {P0, P1,..., Pn}P0 等待的资源被 P1 占有,P1 等待的资源被 P2 占有,……,Pn-1 等待的资源被 Pn 占有,Pn 等待的资源被 P0 占有。

(2)Q:如何解决死锁问题?

  •  死锁的预防

破坏占有并等待:静态分配策略可以破坏死锁产生的第二个条件(占有并等待)。所谓静态分配策略,就是指一个进程必须在执行前就申请到它所需要的全部资源,并且知道它所要的资源都得到满足之后才开始执行。进程要么占有所有的资源然后开始执行,要么不占有资源,不会出现占有一些资源等待一些资源的情况。但这种方式严重降低了资源利用率

破坏循环等待:层次分配策略破坏了产生死锁的第四个条件(循环等待)。在层次分配策略下,所有的资源被分成了多个层次,一个进程得到某一次的一个资源后,它只能再申请较高一层的资源;当一个进程要释放某层的一个资源时,必须先释放所占用的较高层的资源,按这种策略,是不可能出现循环等待链的,因为那样的话,就出现了已经申请了较高层的资源,反而去申请了较低层的资源,不符合层次分配策略。

  • 死锁的避免

银行家算法改善了 资源使用率低的问题 ,但是它要不断地检测每个进程对各类资源的占用和申请情况,以及做 安全性检查 ,需要花费较多的时间。

  • 死锁的检测

当死锁发生的时候,去进行检测,确定发生死锁的进程和资源,然后解决问题。

  1. 如果进程-资源分配图中无环路,则此时系统没有发生死锁
  2. 如果进程-资源分配图中有环路,且每个资源类仅有一个资源,则系统中已经发生了死锁。
  3. 如果进程-资源分配图中有环路,且涉及到的资源类有多个资源,此时系统未必会发生死锁。如果能在进程-资源分配图中找出一个 既不阻塞又非独立的进程 ,该进程能够在有限的时间内归还占有的资源,也就是把边给消除掉了,重复此过程,直到能在有限的时间内 消除所有的边 ,则不会发生死锁,否则会发生死锁。(消除边的过程类似于 拓扑排序)
  • 死锁的解除

当死锁检测程序检测到存在死锁发生时,应设法让其解除,让系统从死锁状态中恢复过来,常用的解除死锁的方法有以下四种:

  1. 立即结束所有进程的执行,重新启动操作系统:这种方法简单,但以前所在的工作全部作废,损失很大。
  2. 撤销涉及死锁的所有进程,解除死锁后继续运行:这种方法能彻底打破死锁的循环等待条件,但将付出很大代价,例如有些进程可能已经计算了很长时间,由于被撤销而使产生的部分结果也被消除了,再重新执行时还要再次进行计算。
  3. 逐个撤销涉及死锁的进程,回收其资源直至死锁解除。
  4. 抢占资源:从涉及死锁的一个或几个进程中抢占资源,把夺得的资源再分配给涉及死锁的进程直至死锁解除。

4、ThreadLocal

(1)对threadlocal的理解

ThreadLocal是多线程中对于解决线程安全的一个操作类,它会为每个线程都分配一个独立的线程副本从而解决了变量并发访问冲突的问题。ThreadLocal实现了线程内资源共享。每个线程内都有一个ThreadLocalMap类型的成员变量。

举个例子:在用JDBC访问数据库的时候,每一个线程和数据库的连接都会放到一个threadlocal里面,这样就能避免线程A中断线程B的连接。

(2)Threadlocal的内存泄露

ThreadLocalMap中的key是弱引用,值为强引用,key会被回收释放内存,而value不会。因此会造成内存泄漏。解决方案:主动remove释放key、value


都看到这里了,给个小心心♥呗~

http://www.dtcms.com/wzjs/8502.html

相关文章:

  • 简单工程承包合同兰州seo优化公司
  • 郑州市人民政府官方网站精准营销
  • p2p网站建设报价百度首页优化
  • 云县网站建设找那家网络营销的方法包括哪些
  • 天津做不锈钢的网站市场调研报告范文
  • 安丘做网站的公司百度推广外包
  • 企业网站建设一般要素包括企业网络营销案例
  • synology做网站服务器seo快速排名工具
  • 织梦网站栏目是做什么用的seo自学教程
  • 文化共享工程网站建设情况百度引擎
  • espcms易思企业网站系统合肥百度推广优化排名
  • 郑州企业做网站h汉狮北京全网营销推广公司
  • 怎么做免费网站教程网站优化排名优化
  • 中咨工程咨询有限公司推广网站排名优化seo教程
  • 出口做谷歌网站视频推广方案模板
  • 公司找网站做宣传做账搜索排名优化
  • 北京专做粮油米面的配送网站网站模板及源码
  • 百度移动网站提交腾讯云1元域名
  • 上海住房和城乡建设委员会门户网站精准推广的渠道有哪些
  • 网站做弹窗广告影响关键词优化的因素
  • 北京电力建设公司官网上海网站排名seo公司哪家好
  • wordpress插件中使用表单seo推广公司教程
  • 微信定制网站建设如何优化网络延迟
  • 做网站去除视频广告西安seo按天收费
  • 网站建设需要精通什么知识电脑培训班速成班
  • 莆田市建设局网站seo 知乎
  • 淘宝小程序开发文档浙江seo外包
  • 北京微信网站搭建多少钱怎么出售友情链接
  • 摄影网站源码下载seo实战培训视频
  • 服务器里面如何做网站百度竞价优化排名