如何在 Java 中创建线程? | Java中的多线程

已发表: 2020-12-29

在本文中,我们将了解 Java 中的线程并探索使线程成为可能的机制。

目录

Java中的线程

Java 中的线程特性是一个轻量级的子进程。 它被认为是最小的处理单元。 它是在程序中实现多任务处理的一种手段。 当涉及到游戏、动画等时,它是一个有用的功能。

Java 具有对创建线程和多线程的内置支持。 这是一种通过优化 CPU 空间利用率来最大限度地减少低效率和拖累的巧妙方法。 在 Java 中,这可以通过两种方式完成:

  1. 扩展线程类,或
  2. 实现可运行接口

当多个线程同时执行时,称为多线程。 这实质上允许程序的多个部分同时运行,线程的每个部分和每个线程都遵循不同的执行路径。

线程利用共享内存空间; 内存没有分配给每个部分,导致CPU使用率最大化。 此外,更改上下文不会占用太多时间。 但是,过多的线程可能会使您的 CPU 参与上下文切换,并且您的执行可能会延迟。

线程可以存在以下六种状态之一

  1. NEW——一旦创建了一个线程,它就以新的状态存在。 它本质上意味着线程尚未开始执行。
  2. RUNNING – 当一个线程正在执行或排队执行时,它处于运行状态。
  3. WAITING - 一个正在运行的线程有时会被暂停或暂停,以允许另一个活动发生。 wait() 或 join() 的非超时版本可以暂停线程执行。 一旦动作发生,暂停的线程就会恢复。
  4. TIMED-WAITING – 运行中的线程有时会暂时停止或暂停特定的持续时间。 例如,当调用 sleep() 函数时。
  5. BLOCKED – 当挂起的 Java 线程无法获取特定资源时,它会被阻塞并以阻塞状态存在。
  6. TERMINATED – 当线程完成执行时,它处于终止状态。 但是,您可以随时终止线程。

了解有关 Java 架构和组件的更多信息。

在 Java 中创建线程的好处

创建线程有几个优点。 其中一些是

  1. 由于线程是独立的,即使它们在共享内存空间上运行,一次执行也不会影响另一次执行。 这也意味着您可以同时执行多个操作。
  2. 线程是多任务处理的一种形式,可以节省时间。
  3. 一个线程中的错误不会影响另一个线程。

如何在 Java 中创建线程?

如上所述,有两种方法可以做到这一点:扩展线程类或实现可运行接口

线程类

Thread 类中有构造函数和方法,允许您执行操作、管理和跟踪线程。 它扩展了 Object 类,然后实现了伴随的 Runnable 接口。 线程类中存在的构造函数是:Thread()、Thread(String name)、Thread(Runnable r) 和 Thread(Runnable r, String name)。

以下是方法及其说明

方法是用来做什么的?
开始() 开始执行
跑步() 为线程运行操作
睡觉() 让线程休眠给定的持续时间
加入() 等到另一个线程终止
获得优先权() 表示给定线程的优先级
设置优先级() 更改给定线程的优先级
获取名称() 返回指定线程的名称
设置名称() 更改指定线程的名称
获取标识() 返回给定线程的 ID
活着() 测试线程是否仍然存在于任何状态
屈服() 暂停线程对象执行以允许另一个线程运行
暂停() 挂起给定的线程
恢复() 从挂起状态恢复线程
停止() 停止给定线程
破坏() 销毁线程组和子组
打断() 导致线程执行中断
被中断() 测试给定的线程执行是否被中断
中断() 测试当前线程执行是否中断
活动计数() 返回线程组中活动线程的数量
持有锁() 当且仅当当前线程持有指定对象上的监视器锁时,它才返回 true。
获取状态() 确定给定线程的状态
setContextClassLoader() 设置上下文 ClassLoader
getContextClassLoader() 返回上下文 ClassLoader

为了通过扩展 Thread 类来创建线程,首先必须创建一个扩展 java.lang.Thread 类的类。 定义此类以覆盖 run() 方法。 接下来,通过调用 start() 方法在新类中创建一个对象以开始线程执行。

必读:你应该检查的 Java 模式程序

可运行接口

这是创建线程的最简单方法。 实现 Runnable 接口只需要一种方法:run()

为了声明它,我们写

公共无效运行()

在 run() 中,我们继续编写代码来创建一个新线程。

报名参加世界顶尖大学的软件工程课程获得行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。

线程类与可运行接口

Thread 类阻止您扩展任何其他类。 这是因为在 Java 中无法实现多重继承。 但是,当我们实现 Runnable 接口时,情况并非如此,您可以继续扩展其他类。

扩展 Thread 类使您可以访问几个重要的方法,从而增强线程的功能。 例如,yield()、stop()、isalive()、interrupt()。 Runnable 接口只有一个相当有限的方法。

包起来

如果您有兴趣了解有关 Java 全栈软件开发的更多信息,请查看 upGrad 和 IIIT-B 的全栈软件开发执行 PG 计划,该计划专为在职专业人士设计,提供 500 多个小时的严格培训,9+项目和任务、IIIT-B 校友身份、实用的实践顶点项目和顶级公司的工作协助。

踏上梦想的工作

立即申请软件工程硕士