Java中的线程生命周期核心概念是什么


本篇内容主要讲解“Java中的线程生命周期核心概念是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中的线程生命周期核心概念是什么”吧!在Java语言中,多线程是由线程的核心概念驱动的。线程在其生命周期中会经历各种状态:java.lang.Thread类包含一个静态枚举,它定义了它的潜在状态。在任何给定的时间点内,线程只能处于以下状态之一:NEW– 一个新创建的线程,尚未开始执行RUNNABLE– 正在运行或准备执行,但它正在等待资源分配BLOCKED– 等待获取监免费云主机域名视器锁以进入或重新进入同步块/方法WAITING– 等待其他线程执行特定操作,无任何时间限制TIMED_WAITING– 等待其他线程在指定时间段内执行特定操作TERMINATED– 已完成执行上图涵盖了所有这些状态;现在让我们详细讨论其中的每一项。新线程(或出生线程)是已创建但尚未启动的线程。在我们使用start()方法启动它之前,它一直保持此状态。以下代码段显示了新创建的处于新状态的线程:由于我们尚未启动上述线程,因此方法t.getState()会打印:NEW当我们创建了一个新线程并对其调用start()方法时,它将从NEW状态移动到RUNNABLE状态。处于此状态的线程正在运行或准备运行,但它们正在等待来自系统的资源分配。在多线程环境中,线程调度程序(JVM的一部分)为每个线程分配固定的时间量。因此,它会运行一段特定的时间,然后将控制权交给其他可运行的线程。例如,让我们将t.start()方法添加到前面的代码中,并尝试访问其当前状态:此代码很可能返回以下输出:RUNNABLE请注意:在本例中,并不总是保证在控件到达t.getState()时,它仍处于可运行状态。线程调度器可能会立即对其进行调度,并可能完成执行。在这种情况下,我们可能会得到不同的输出。当前没有资格运行的线程处于阻塞状态。它在等待监视器锁定并尝试访问被其他线程锁定的代码段时进入此状态。让我们尝试重现这种状态:在此代码中:我们创建了两个不同的线程—t1t2t1启动并进入synchronized commonResource()方法;这意味着只有一个线程可以访问它;在当前线程完成处理之前,将阻止尝试访问此方法的所有其他后续线程进一步执行当t1进入此方法时,它将保持在无限while循环中;这只是为了模拟繁重的处理,以便所有其他线程都无法进入此方法现在,当我们启动t2时,它尝试进入commonResource()方法,t1已经访问了该方法,因此t2将保持在阻塞状态处于这种状态,我们称之为t2.getState()并获取输出,如下所示:BLOCKED线程在等待其他线程执行特定操作时处于等待状态。根据JavaDocs,任何线程都可以通过调用以下三种方法中的任何一种进入这种状态:object.wait()thread.join()LockSupport.park()请注意,在wait()join()中,我们没有定义任何超时时间,因为下一节将介绍该场景。现在,让我们尝试重现这种状态:让我们讨论一下我们在这里做什么:我们已经创建并启动了t1t1创建t2并启动它当t2的处理继续时,我们称之为t2.join(),这会使t1处于等待状态,直到t2完成执行因为t1正在等待t2完成,所以我们调用t1.getState()来自t2正如您所期望的那样,这里的输出是:WAITING当线程等待另一个线程在规定的时间内执行特定操作时,该线程处于TIMED_WAITING状态。根据JavaDocs,有五种方法可以将线程置于TIMED_WAITING状态:thread.sleep(long millis)wait(int timeout)wait(int timeout, int nanos)thread.join(long millis)LockSupport.parkNanosLockSupport.parkUntil现在,让我们尝试快速重现这种状态:这里,我们创建并启动了一个线程t1,该线程进入睡眠状态,超时时间为5秒;输出将为:TIMED_WAITING这是死线程的状态。当它完成执行或异常终止时,它处于终止状态。让我们在以下示例中尝试实现此状态:在这里,虽然我们已经启动了线程t1,但它是下一个语句Thread.sleep(1000)为t1提供了足够的时间来完成,因此该程序为我们提供如下输出:TERMINATED除了线程状态之外,我们还可以检查isAlive()方法以确定线程是否处于活动状态。例如,如果我们在此线程上调用isAlive()方法:到此,相信大家对“Java中的线程生命周期核心概念是什么”有了更深的了解,不妨来实际操作一番吧!这里是百云主机网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

相关推荐: php拿不到name如何解决

本篇内容介绍了“php拿不到name如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!免费云主机域名希望大家仔细阅读,能够学有所成! php拿不到name是因为当表单元素的name和id的…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 03/11 18:48
Next 03/11 19:06

相关推荐