本文的主要重点是基于以下问题。在阅读之前,对问题的答案有什么想法?
从操作系统的角度来看,线程的状态分为五种类型:初始状态,现成状态,操作状态,阻止状态和终止状态
创建由线程创建函数创建的新线程。执行线程创建功能后,将返回一个线程标识符
创建了操作系统中的线程,并且可以分配CPU资源,但是执行尚未开始
通过CPU资源获得可以运行状态的线程后,该线程将被执行并输入此状态
指由于事件而阻止线程的状态,并且处于悬挂状态。这次,线程将释放CPU资源,而阻止状态的线程没有机会获得使用权CPU。
执行线程或发生错误后,输入终止状态
作为参考,可以将Java线程的状态分为几个:
它只是新创建的线程,并且没有呼叫方法可以在线程中启动代码。
这里的运行状态等效于“就绪状态(就绪)和操作系统线程状态中的运行状态(运行)。
扣押调度系统将被分配给准备执行时间胶片执行任务的线程。当用完芯片时,操作系统将根据优先级选择其他线程。A线程可能等待运行或运行或在系统级别运行。但是这些状态可以视为JVM的运行状态。
该状态仅与锁有关。国家唤醒后,它将由于需要竞争而进入州。
Java中的状态与操作系统中的阻塞状态不同。Java中的阻塞必须与锁有关。
从操作系统的角度来看,由于调用阻止API(例如IO操作),该线程将进入阻止状态。在JVM下,该线程的状态是什么?我不知道是否有大个子解释。
相关信息的解释如下:
对于JVM,等待CPU使用右侧(操作系统中的线程)和IO操作的等待(操作系统中的线程处于休眠状态)。
那是一个状态吗?
一个线程正在等待另一个线程执行特定的操作以唤醒此线程。觉醒的线程将进入状态并重新加入。
随着时间的推移等待,让CPU出去,不会等待其他线程唤醒的时间。可以自动唤醒时间
线程已终止,可能是正常的,也可能是异常终止。通常,可以终止的操作如下所示:
Java线程(块),结束状态(等待)和时间限制等待状态(TIMED_WAITING)中的阻止状态是一种状态,即通用线程的生命周期中的睡眠状态。只要Java中的螺纹在这三个状态下,该线程就没有使用CPU的权利。
如何调用线程对象
只有一种可能性:输入同步修改的方法和代码块,但是由于它无法获得锁定志愿者,因此它变成了一个块。
基本上,这是一种调用超时参数的方法,如下所示:
对象类:
线程类:
使用同步对象调用此方法以使当前线程在等待状态中,直到其他线程调用同步对象的方法或方法以唤醒线程,或者超过设置的超时时间。
该方法的两个参数:
有一些注意点:
使用同步对象调用此方法。从对象等待池中,随机选择一个线程以删除并将其放入锁定徽标中,然后等待池。只有锁定徽标中的线程才能获得锁定徽标。在当前线程放弃对象的锁之前,觉醒线将不会继续,他们准备随时争夺锁的所有权。
使用同步对象调用此方法来唤醒池中的所有等待线,并让它们连接锁定符号并等待池中的竞争锁。
并且只能在语句中使用,但是如果它用于同步,我们如何实现这三种方法的效果?解决方案是获得类对象,然后与上述三种方法相对应。
启动线程,使用线程的实例调用此方法,JVM将调用此线程的运行方法。
JDK18描述如下所示:
根据定时设备和调度程序的准确性和准确性,使当前执行的线程休眠(临时停止执行)在指定的毫秒内(暂时停止执行)。该线程不会丢失任何监视器的所有权。
JDK18描述如下所示:
调度程序的提示是,当前线程愿意产生其当前对处理器的使用。调度程序可以自由忽略此提示。
此方法是一种尝试更改操作系统线程调度的方法。调用此方法只是将当前线程返回到可执行状态。更改此线程后,可以立即执行。
JDK18描述如下所示:
在大多数毫无疑问的情况下等待该线程死亡。一个暂停,要永远等待。
该实现使用呼叫的循环。当线程终止时,该方法被调用。建议不使用应用程序或在实例上使用应用程序。
调用线程A中线程B的JOIN()方法,然后在线程结束后,线程A将继续执行B。从源代码实现和JDK文档描述,我们可以看到它基于方法。
原始:https://juejin.cn/post/7099483629847969806