搜索
首页Javajava教程Java中的线程生命周期

线程在生命周期中经历多个阶段。例如,一个线程进入世界,启动,运行,然后消失。下图解释了线程的完整生命周期。

Java中的线程生命周期

开始您的免费软件开发课程

网络开发、编程语言、软件测试及其他

  • 线程构造函数通过新状态生成线程。
  • 调用Thread中的begin方法可以使其进入可运行状态。
  • 有关 Java 的线程调度程序在处理器收到该线程时运行该线程。
  • 当线程进入阻塞状态时,它会再次运行,因为它回到了可运行状态。
  • 如果wait方法被称为线程会进入等待状态,那么在整个Inform和notify all方法中变成通知后很快就会进入可运行状态。
  • 一旦 run 方法终止,线程就会结束。

什么是线程?

线程是在操作系统级别定义的。 Java 语言以及所有其他语言都利用操作系统提供的服务。从开发人员的角度来看,线程是我们将编写应用程序并以某种方式执行的一组指令。应用程序本身可以由多个线程组成。不同的线程可以同时执行。 JVM(Java 虚拟机)使用多个线程。有用于垃圾收集的线程。有针对即时编译器的线程和其他技术线程。

Java 中线程生命周期的状态

下面是Java中线程生命周期的不同状态:

1。新:新线程在新状态下开始其生命周期。在程序开始线程之前,它会继续保持此状态。此外,它也称为创建的线程。

2。可运行:在最近生成的线程可以开始后,该线程将变为可运行。具有此状态的线程被认为正在执行其进程。

3。等待:有时,即使线程正在等待另一个线程执行活动,线程也会转换为等待状态。仅当附加线程指示等待线程继续执行时,线程才会转换为可运行状态。

4。定时等待:可运行线程可以轻松地进行特定的定时等待状态以获得特定的时间间隔。一旦该点间隔到期或者它真正等待的事件发生,具有此状态的线程就会转换返回到可运行状态。

5。终止:可运行线程进入终止状态,因为它完成了其任务,否则终止。

如何在 Java 中创建线程?

Java中创建线程最基本的方法是使用Runnable模式。首先,你需要创建一个Runnable接口的实例,这很简单;只有一种方法可以实现。然后我们将此实例传递给 Thread 类的构造函数。然后,我们只需调用创建的线程对象的 start() 方法来启动一个新线程,该线程将运行包装在 Runnable 对象中的任务。

Java中的线程生命周期

首先,我们创建一个 Runnable 实例。  只有一种方法需要实现,称为 run() 方法。这是 Java 7 的模式,使用匿名类的实例来实现这一点。但是我们也可以使用 lambda 表达式来实现 Runnable,因为 Runnable 接口中只有一个方法。

Java中的线程生命周期

让我们在非常简单的示例上创建线程。

我们将了解应同步的未同步代码的竞争条件会出现什么问题,并且我们将使用同步来修复我们的代码。第一个例子非常简单;这是非常基本的。这只是创建一个任务。

Java中的线程生命周期

输出:

Java中的线程生命周期

任务是 Runnable 接口的一个实例,我们称其为 Runnable,我们可以使用 lambda 表达式来实现该接口。该任务被交给一个新线程并在该线程的上下文中执行。因此,我们将打印出正在运行此任务的线程的名称。我正在运行... Thread.currentThread() 是 Thread 类的静态方法,它返回运行当前任务的线程。我们只需在该线程对象上调用 getName() 即可返回线程的名称,然后在创建 Thread 实例后 t = new Thread.  将此可运行程序作为参数传递。那么这个线程就要执行这段代码了。并启动它。 t.start() 这是我们需要调用的 start() 方法。我们还可以使用 t.setName(“My thread”) 给出该线程的显式名称。现在我们可以执行这段代码了。现在我们不再调用start()方法,而是调用run()方法,如果我们运行这段代码,问题是任务正确执行了,但它没有在我们创建的线程中执行。它是在主线程中执行的,也就是执行main方法的线程。因此,如果我们想启动一个新线程,则不应调用此 run() 方法。

Java中的线程生命周期

输出:

Java中的线程生命周期

Java中线程生命周期的方法

简单的Thread描述的方法如表所示。

Data Types Thread Method Names
String

getName()

Return this thread’s name

int get priority()

Returns the thread’s priority

boolean isAlive()

Tests if this thread is still running

void join()

Waits for this thread to die (terminate)

void run()

Whenever this thread was built utilizing an individual Runnable object, which usually Runnable object’s run method is called, this method will do nothing and returns. Whenever thread class can be extended and run() method is over-ridden during sub-class, then an over-ridden run() method is called.

void setName(String name)

Alterations the name with this thread to become comparable to the argument name.

static void

 

 

sleep(long millis) throws Interrupted/Exception
It causes the presently performing thread to rest for
the required quantity of milliseconds.
static void sleep(long millis, int Nanos) throws InterruptedException

It causes the presently performing thread to sleep (cease execution) for the required quantity of milliseconds as well as the particular quantity of nanoseconds.

void start()

Triggers these threads to start execution; the Java Virtual Machine calls the run method of that thread.

static void yield()

Triggers the presently thread object to pause and permit additional threads to execute briefly.

static Thread currentThread()

Returns a mention of the presently executing thread object.

数据类型

线程方法名称
    字符串

  • getName()
  • 返回该话题的名称

  • 整数
  • 获取优先级()
  • 返回线程的优先级 布尔值 isAlive() 测试该线程是否仍在运行 无效 join() 等待该线程死亡(终止) 无效 run() 每当使用单个 Runnable 对象构建此线程时(通常调用 Runnable 对象的 run 方法),该方法将不执行任何操作并返回。每当线程类可以扩展并且在子类期间重写 run() 方法时,就会调用重写的 run() 方法。 无效 setName(字符串名称) 使用此线程更改名称,使其与参数名称相当。 静态无效     睡眠(长毫秒)抛出中断/异常
    它导致当前正在执行的线程休息
    所需的毫秒数。 静态无效 sleep(long millis, int Nanos) 抛出 InterruptedException 它导致当前执行的线程休眠(停止执行)所需的毫秒数以及特定的纳秒数。 无效 开始() 触发这些线程开始执行; Java 虚拟机调用该线程的 run 方法。 静态无效 产量() 触发当前线程对象暂停并允许其他线程短暂执行。 静态线程 currentThread() 返回当前正在执行的线程对象的提及。 表> 结论 开始使用线程很简单,但掌握起来却非常困难。 设计包含线程安全方法的类具有挑战性。 阅读:JavaDoc 获取 java.lang.Thread 类

    以上是Java中的线程生命周期的详细内容。更多信息请关注PHP中文网其他相关文章!

    声明
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
    JVM中的类加载程序子系统如何促进平台独立性?JVM中的类加载程序子系统如何促进平台独立性?Apr 23, 2025 am 12:14 AM

    类加载器通过统一的类文件格式、动态加载、双亲委派模型和平台无关的字节码,确保Java程序在不同平台上的一致性和兼容性,实现平台独立性。

    Java编译器会产生特定于平台的代码吗?解释。Java编译器会产生特定于平台的代码吗?解释。Apr 23, 2025 am 12:09 AM

    Java编译器生成的代码是平台无关的,但最终执行的代码是平台特定的。1.Java源代码编译成平台无关的字节码。2.JVM将字节码转换为特定平台的机器码,确保跨平台运行但性能可能不同。

    JVM如何处理不同操作系统的多线程?JVM如何处理不同操作系统的多线程?Apr 23, 2025 am 12:07 AM

    多线程在现代编程中重要,因为它能提高程序的响应性和资源利用率,并处理复杂的并发任务。JVM通过线程映射、调度机制和同步锁机制,在不同操作系统上确保多线程的一致性和高效性。

    在Java的背景下,'平台独立性”意味着什么?在Java的背景下,'平台独立性”意味着什么?Apr 23, 2025 am 12:05 AM

    Java的平台独立性是指编写的代码可以在任何安装了JVM的平台上运行,无需修改。1)Java源代码编译成字节码,2)字节码由JVM解释执行,3)JVM提供内存管理和垃圾回收功能,确保程序在不同操作系统上运行。

    Java应用程序仍然可以遇到平台特定的错误或问题吗?Java应用程序仍然可以遇到平台特定的错误或问题吗?Apr 23, 2025 am 12:03 AM

    Javaapplicationscanindeedencounterplatform-specificissuesdespitetheJVM'sabstraction.Reasonsinclude:1)Nativecodeandlibraries,2)Operatingsystemdifferences,3)JVMimplementationvariations,and4)Hardwaredependencies.Tomitigatethese,developersshould:1)Conduc

    云计算如何影响Java平台独立性的重要性?云计算如何影响Java平台独立性的重要性?Apr 22, 2025 pm 07:05 PM

    云计算显着提升了Java的平台独立性。 1)Java代码编译为字节码,由JVM在不同操作系统上执行,确保跨平台运行。 2)使用Docker和Kubernetes部署Java应用,提高可移植性和可扩展性。

    Java的平台独立性在广泛采用中扮演着什么角色?Java的平台独立性在广泛采用中扮演着什么角色?Apr 22, 2025 pm 06:53 PM

    Java'splatformindependenceallowsdeveloperstowritecodeonceandrunitonanydeviceorOSwithaJVM.Thisisachievedthroughcompilingtobytecode,whichtheJVMinterpretsorcompilesatruntime.ThisfeaturehassignificantlyboostedJava'sadoptionduetocross-platformdeployment,s

    容器化技术(例如Docker)如何影响Java平台独立性的重要性?容器化技术(例如Docker)如何影响Java平台独立性的重要性?Apr 22, 2025 pm 06:49 PM

    容器化技术如Docker增强而非替代Java的平台独立性。1)确保跨环境的一致性,2)管理依赖性,包括特定JVM版本,3)简化部署过程,使Java应用更具适应性和易管理性。

    See all articles

    热AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智能驱动的应用程序,用于创建逼真的裸体照片

    AI Clothes Remover

    AI Clothes Remover

    用于从照片中去除衣服的在线人工智能工具。

    Undress AI Tool

    Undress AI Tool

    免费脱衣服图片

    Clothoff.io

    Clothoff.io

    AI脱衣机

    Video Face Swap

    Video Face Swap

    使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

    热工具

    VSCode Windows 64位 下载

    VSCode Windows 64位 下载

    微软推出的免费、功能强大的一款IDE编辑器

    MinGW - 适用于 Windows 的极简 GNU

    MinGW - 适用于 Windows 的极简 GNU

    这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

    mPDF

    mPDF

    mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

    PhpStorm Mac 版本

    PhpStorm Mac 版本

    最新(2018.2.1 )专业的PHP集成开发工具

    SublimeText3 英文版

    SublimeText3 英文版

    推荐:为Win版本,支持代码提示!