您现在的位置是:首页» windows系统» java并发知识总结,java并发高频面试试题

java并发知识总结,java并发高频面试试题

2024-07-13 12:31:47
本内容由系统网小编为大家分享,Windows系统安装教程、办公系统、软件怎么使用、软件使用教程、办公软件攻略等信息。Java 并发常见知识点&面试题总结-(基础)么是线程和进程?何为进程?这个过程是一个执行过程,是系统操作程序的基本单位,因

本内容由系统网小编为大家分享,Windows系统安装教程、办公系统、软件怎么使用、软件使用教程、办公软件攻略等信息。

Java 并发常见知识点&面试题总结-(基础)

么是线程和进程?

何为进程?

这个过程是一个执行过程,是系统操作程序的基本单位,因此是动态的。这个系统执行一个程序,从创建到运行到灭绝。

当我们在 Java 引用主函数时, 我们真正引用 JVM 进程, 而主函数所在的线条就是这个过程中的线条, 也称为主线 。

通过在 Windows 中检查任务管理器,我们可以清楚地看到Windows (已执行的文件) 中正在运行的流程,如下图所示。

何为线程?

线程与进程相似,另一方面,这条线是比执行过程小的一个执行单位。在整个执行过程中,一个过程可以产生许多线索。与这一进程不同的是,同一种堆叠和方法学领域资源与这一进程有着许多共同点。另一方面,每条线都有自己的程序员、虚拟医务室和本地方法仓库。因此,该系统正在形成一条线。我不知道我能否完成这个任务 或者我是否不得不在线际之间交换职业负荷远远低于程序。也正因为如此,线索也称为轻量级过程。

Java是设计成多跟踪软件的,我们可以使用JMX应用程序来检查一个典型的 Java 程序的下列线条。 我们可以用JMX 来检查一个典型的 Java 程序的下列线条。 我们可以用JMX 来检查一个典型的 Java 程序的下列线条。

上述方案产出如下(产出可能改变而不会不适当地影响任何后续线条的影响,只有在主要线条已知的情况下才能执行:

如上文产出所示, Java 应用程序同时运行一条主线和多个附加线。

请简要讨论与这一进程的联系、区别、利弊。

从联合核查团的角度来看,进程和线之间的联系

线线与图形进程的链接

这里展示了爪哇的记忆区, 我们从JVM的角度考察了线索过程的交互作用。

如上图所示,一个进程中有许多线条、线条共享过程的堆叠和** 方法区域(JDK1)。虽有资源可用,但每条线索都有其自己的资源*程序计数器以及虚拟机库和当地方法商店。

线条是一个较小的业务单位,分成若干程序,最显著的区别是,线条和进程基本上是自主的,尽管线条不一定是相同的,因为同一进程中的线条更可能相互作用。线条执行费用较低,但不利于资源管理和养护;进程恰恰相反。

这是知识点的扩张!

那么,为什么程序柜台、虚拟机库和地方方法商店是私有的呢?为什么书架和方法部门是共享的呢?

为什么计程柜台保密?

该方案的柜台有两个目的:

字节数的口译员通过调整程序来控制代码,使其与按顺序阅读命令相对应。例如,选择、重复和异常处理都是序列执行的实例。 如果出现许多线索, 程序计数器将用来存储当前线索执行的位置, 以便线索在被调回时知道它上次被执行的位置 。

值得指出的是,如果使用本地技术, 程序计数器记录未定义的地址, 只有 Java 代码计时器保存下一个命令地址 。

因此,程序柜台是私人持有的,主要用于恢复直线开关后的正确执行点。

为什么虚拟机库和当地方法储存室是私密的?

虚拟机库 : 每套 Java 方法都是通过建立白金来存储信息, 如本地变量表格、 操作堆叠、 常数池参考等 。 进入和离开 Java 虚拟机库仓库的过程与该方法被要求完成执行的时间相对应 。 当地方法仓库:其功能与虚拟机库功能相当相似。区别在于虚拟机库执行 Java (即虚拟机器服务 (字节代码) 。虚拟机器使用的导航方法由本地方法仓库使用。它与热点站虚拟机器中的爪哇虚拟机库相融合。

因此,虚拟和地方工具棚是私人开设的,以确保线条上的本地变量无法为其他线索所利用。

直截了当地理解书架和技术领域。

所有线索都可访问堆叠和方法区域 。这一进程最大的记忆,世界上最大的记忆,是世界上最大的记忆。它通常用来保存新形成的物体(几乎所有的物体都在这里分配内存)。方法领域通常用于存储已装入的数据,如类型信息、常数、静态变量、即时编译代码等。

平行和平行之间的区别是什么?

当同时进行两项或多项行动时,即发生共同执行。 平行是指同时进行两个或两个以上的作业。

为什么你要用这么多线?

先从总体上来说:

线条可以比作轻量级进程、最小的方案执行单位,而线间切换和发送的成本比过程要低得多。 此外,多核CPU时代意味着许多线条可以同时执行,从而降低线条切换的成本。 鉴于目前的因特网发展趋势:目前的系统根本不移动,多线和编程系统是发展高速系统的基础,通过使用若干线性机制,这些系统可大大改善整个系统的综合能力和性能。

然后从电脑底部偷窥

无核时代:多线技术的主要目的是提高在无核时代使用CPU和IO系统的单一工艺的效率。假设只有一个爪哇进程在运行。当我们要求IO的时候如果爪哇进程只有一条线,铁丝网被IO拖住了 整个过程也被拖住了CPU 和 IO 设备仅用于因此,让我们简单地说,这个系统的总效率只有50%。当有很多线索的时候,内务办公室堵住了一条线其他线索也可以继续使用CPU。这提高了爪哇进程在系统资源使用方面的总体效率。 多核年龄:多线多核年龄课程的主要目的是提高该过程使用多核CPU的能力。例如,如果我们不得不计算一个复杂的问题,我们只用一条线不管机器是否有一些CPU核心只有一个CPU核心在使用中。而创建多个线程,这些线条可以在几个CPU的底部进行路由和操作。在特派团没有为众多线索提供相互竞争的资源的情况下,解决这一挑战是不可能的。任务执行的效率将大大提高。约约(单一内核/CPU核心数的单个内核/CPU执行时间)

跑几条线有什么问题?

共同拟订方案的目标是提高进程执行的效率和速度,但是,共同拟订方案并不总是能改善进程业绩,共同拟订方案可能涉及诸如内存漏漏、锁、不安全线等等各种问题。

告知我这条线的生命周期和现状

在确定的运行寿命周期期间,爪哇只可能位于六个可能的州之一(图爪哇和方案编制第1.4条)。

线条在生命周期中不会停留在某个状态,而是随着代码的运行,在几个州之间移动。下图描述了爪哇的线性状态转变(来自爪哇的草图和编程艺术)。

修订版( 从新窗口中的第7336期打开): 将原始图表中的等待状态转换为可运行状态 。 join实际上是Thread这是一个正式的方法, 但它在这里有记录。Object。

如上图所示,当线线形成时,将处于新(新)状态,调用start()方法开始执行, 线条标记为 READY( 运行中) 。 活动线条获得 CPU 时间工作表( 时间切换), 并标记为 RUNNING( 运行中) 。

在操作系统一级,有两个州: " 准备 " 和 " 运行 " 。在JVM一级显示的只是运行状态。 HowToDoInJavaopen in new window : Java Thread Life Cycle and Thread Statesopen in new window ),因此,爪哇的系统通常将这两个国家称为单一实体。 现况:运行(进行中)。

为什么联合核查团没有区别对待这两个州? (摘自: Java线的第六个状态是什么?- Dawell的反应出现在新的窗口里 ) 现在的 时间共享多任务(多任务)操作系统结构往往使用“时间量或时间切片”(圆环)方法实施。这一时间段往往很短。线索只能在 CPU 上执行 10 至 20 米( 在运行状态的目前阶段 ) 。大约是0.01秒当使用时间工作表时,该工作表将移到排程器队列的末尾,并重新安排时间。(即回到准备状态。 )这条线移动得太快了区分两种情况是毫无意义的。

当线程执行wait()线索在方法之后进入等待(等待)状态。 返回活动状态的其他行的等待需要通知路径, 而时间上的等待(超时等待)状态根据等待状态增加了额外的时间限制, 例如通过sleep(long millis)方法或wait(long millis)这种方法涉及将爪哇线设定为时代消费状态。超时后, Java 线条返回运行状态。当线索要求同步时,如果没有锁的话线索将被标记为已锁定 。Runnable 正在用线索执行 。run()其后,该程序将达到受污染(终止)状态。

相关读数:在新窗口中错误选择关于爪哇艺术与编程线性状态的三个不准确之处。

什么是上下文切换?

线条将有自己的操作环境和执行期间的状态(也称为上下文),例如上面提到的程序计数器、垫子上的信息等等。 当以下事件发生时,线条将偏离CPU状态 。

例如, CPU 已被移动 。sleep(),wait()等。 由于操作系统阻止一条线或程序长时间使用CPU,导致另一条线或程序饿死,因此时间表过期。 防止了诸如要求严格的国际业务组织等阻挠行为造成的系统干扰。 被终止或结束运行

前三个系统都将有一个线性开关, 这意味着当前线条的上下文必须保持, 留留线以在 CPU 下次被占用时恢复, 并加载下一个将占据 CPU 的线性上下文 。

上下文切换是现行操作系统的一个基本特征,因为它需要使用系统资源,如CPU、内存等,因此每次它们需要保持信息恢复信息时,都需要使用系统资源,从而造成效率的某种程度的丧失,如果经常调换,会造成整体效率低下。

什么是线锁? 你如何避免死锁?

认识线程死锁

线索锁定显示许多线索在等待释放资源的同时被堵住。 由于线索被永远卡住, 操作无法正常结束 。

A线持有资源,B线持有资源,他们都希望相互申请对方的资源,所以两条轨道等待彼此锁定,如下图所示。

下面的代码复制了上述地图的锁, 并举例说明了线条的链条是如何锁定的(代码取自共同编程的美):

Output

线程 A 通过synchronized (resource1)获得resource1监视器已被锁定, 您已经通过 。Thread.sleep(1000);允许线索 A 到冬眠 1, 这样线索 B 就可以运行并获得资源监视锁 。线索A和线索B在其沉睡期结束后开始相互寻求取用对方的资源。这两条线将处于互相等待的状态。这也就产生了死锁。

上述例子符合研制死锁的四项要求:

期待: 只要一条线就可以在任何特定时刻使用资源 。 请求和留用条件:如果一线因资源请求而停滞不前,则保留已经收到的资源。 (b) 不剥夺:在未利用之前,不得通过其他途径强行剥夺以前获得的资源,资源只有在自己使用后才释放。 当无数线索形成周期性资源等待连接时,就会出现周期性等待。

我们如何防止和避免死锁?

如何避免锁?必须满足以下要求才能销毁锁:

请求中断和状况维护:一次性请求所有资源。 破坏非剥夺条件:如果不进一步申请其他资源,可主动放弃其拥有的资源。 销毁等待条件周期:按顺序资源应用加以预防。按具体顺序要求资源,按相反顺序要求释放资源。

如何避免死锁?

通过应用算法(例如银行家算法)来计算资源分配并在分配资源时将其置于安全位置,从而避免锁定。

安全状态指的是系统能够按照某种线程推进顺序(P1、P2、P3…Pn)来为每个线程分配所需资源,直到满足每个线程对资源的最大需求,使每个线程都可顺利完成。称<P1、P2、P3…Pn>序列为安全序列。

我们要把2号线代码移到底部 这样它就不会导致一个死锁

Output

让我们看看密码 为什么锁不起作用?

线索 1 最初获得对资源的监视锁定, 线索 2 没有 。线1然后前往获取资源2 监测器的监视锁。可以获取到。然后线1解开资源1和资源2监测器的锁。2号线索可用,可以执行。循环等待条件因此被摧毁。因此避免了死锁。

睡眠和等待方法之间有什么区别和共同点?

两者之间的主要区别如下: sleep()方法没有释放锁,而wait()方法释放了锁。 两者均可停止执行线条。 wait()它通常用于线性互动/通信。sleep()暂停适用是最常见的申请。 wait()当该方法被引用时,线条不会自动醒过来,同一对象上需要另一条线。notify()或者notifyAll()方法。sleep()使用该方法后, 线条会自动唤醒。 或者, 您可以使用它 。wait(long timeout)过去的线索自然会唤醒

当我们调用运行()方法时, 为什么我们应用启动()方法? 为什么我们不能只使用运行()方法?

这是另一个极为常见的爪哇多跟踪访谈问题。它很简单,但很多人不回答!

线索已被重新命名为新线索 。start()当时间工作表被分配时,启动线条并将其置于准备状态的程序开始执行。start()细线将以适当的方式准备,然后自动执行。run()该方法的内容是一个真正的多线性任务。 尽管如此, 直截了当的执行 。run()方法,会把run()该方法在主线中作为一种调适方法运行,而不是在线索中执行,因此这不是多线工作。

总结: 调用start()该程序涉及激活线线并准备直接执行。run()这种办法不会以多线方式使用。

XTw.com.Cn系统网专业应用软件下载教程,免费windows10系统,win11,办公软件,OA办公系统,OA软件,办公自动化软件,开源系统,移动办公软件等信息,解决一体化的办公方案。

免责声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。内容仅供参考使用,不准确地方联系删除处理!

联系邮箱:773537036@qq.com