Java线程几种常用方法详细说明

在Java编程中,多线程编程是一个非常重要的主题。它允许我们同时运行多个任务,提高程序的性能和响应速度。在这篇博客中,我们将介绍一些常用的Java线程方法和构造器,并通过示例代码展示如何使用它们。

Thread提供的常用方法
  1. public void run()

    说明: 线程的任务方法。在一个线程被启动之后,run方法中的代码会被执行。这是一个必须被重写的方法,它包含了线程将要执行的任务。
  2. public void start()

    说明: 启动线程。调用此方法会导致一个新的线程被创建并执行。在start方法中,JVM会调用线程的run方法。
  3. public String getName()

    说明: 获取当前线程的名称。线程名称默认是Thread-索引,但可以通过setName方法进行修改。
  4. public void setName(String name)

    说明: 为线程设置名称。可以通过此方法设置或修改线程的名称,以便更好地管理和调试线程。
  5. public static Thread currentThread()

    说明: 获取当前执行的线程对象。这个方法是静态的,调用它可以获取对当前正在执行的线程的引用。
  6. public static void sleep(long time)

    说明: 让当前执行的线程休眠指定的毫秒数。线程在指定时间内不会执行任何操作,之后会继续执行。这是一个静态方法,需要捕获InterruptedException
  7. public final void join()

    说明: 让调用此方法的线程先执行完。当前线程会等待调用此方法的线程执行完毕后再继续执行。
Thread提供的常见构造器
  1. public Thread(String name)

    说明: 可以为当前线程指定名称。创建一个具有指定名称的新线程。
  2. public Thread(Runnable target)

    说明: 封装Runnable对象成为线程对象。创建一个新线程,执行指定的Runnable对象的run方法。
  3. public Thread(Runnable target, String name)

    说明: 封装Runnable对象成为线程对象,并指定线程名称。创建一个新线程,执行指定的Runnable对象的run方法,并赋予线程一个指定的名称。
示例代码 

下面是一段包含上述方法的Java代码,并带有详细注释:

public class ThreadExample {public static void main(String[] args) {// 创建一个Runnable对象,定义线程要执行的任务Runnable task = new Runnable() {@Overridepublic void run() {// 打印当前线程名称System.out.println("Thread running: " + Thread.currentThread().getName());try {// 让当前线程休眠1000毫秒Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("Thread finished: " + Thread.currentThread().getName());}};// 创建并命名第一个线程Thread thread1 = new Thread(task, "Thread-1");// 使用构造函数给线程命名Thread thread2 = new Thread(task, "Thread-2");// 设置线程名称thread1.setName("Renamed-Thread-1");// 启动线程thread1.start();thread2.start();// 获取并打印线程名称System.out.println("Thread 1 name: " + thread1.getName());System.out.println("Thread 2 name: " + thread2.getName());try {// 等待线程1执行完毕thread1.join();// 等待线程2执行完毕thread2.join();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("Both threads have finished execution.");}
}
代码说明:
  1. Runnable task

    创建一个Runnable对象,其run方法定义了线程要执行的任务,任务内容为打印当前线程名称,休眠1秒后再打印结束信息。
  2. Thread thread1 = new Thread(task, "Thread-1")

    创建一个新的线程对象thread1,任务为task,并指定线程名称为"Thread-1"。
  3. thread1.setName("Renamed-Thread-1")

    修改thread1的名称为"Renamed-Thread-1"。
  4. thread1.start() 和 thread2.start()

    启动thread1thread2,使其开始执行任务。
  5. thread1.getName() 和 thread2.getName()

    获取并打印线程的名称。
  6. thread1.join() 和 thread2.join()

    主线程等待thread1thread2执行完毕后再继续执行。这确保了所有线程都完成后才打印最后的信息。
  7. Thread.sleep(1000)

    run方法中使当前线程休眠1000毫秒。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/21160.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot与Spring Framework提供的缓存抽象

目录 缓存 项目总结 新建一个SpringBoot项目 pom.xml application.properties CacheConfig Book BookRepository接口 BookService服务类 BookController控制器 SpringbootCacheApplication启动类 启动项目,使用Postman测试 参考博文: 1、使用…

llvm 3.5 源码分析 clang for x86 001 之搭环境

0,目标 编译 针对x86 的,debug 的 c语言的编译器 1,下载代码 git clone --recursive 。。。llvm-project.git $ cd llvm-project 2,预备代码 llvm 3.5 版本的源代码,早期版本,可能比较小比较容易debug $…

Unity MiniCPM-V 让引擎拥有视觉

Unity MiniCPM-V 让引擎拥有视觉 前言项目Python环境布置Unity场景布置代码编写添加并设置脚本总结 鸣谢AI提示 前言 新发布的MiniCPM-V,忍不住玩一下,可以让之前制作的语音助手拥有一定的视觉能力(不是OpenCV不行,而是AI更加符合…

深入理解Java关系运算符,避免常见错误!

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

复现CELL文章图片,在线绘制scRNA-seq多个cluster的差异火山图

导读 火山图表示两组间的差异,而在scRNA-seq中,同时会有多个cluster(vs其他cluster)的差异。如果用常规火山图展示,可能需要绘制十几个图。有没有更高效的展示方法呢?今天给大家带来CELL文章“A Spatiotem…

打造SimPO新算法,微调8B模型超越Claude 3 Opus

前言 大型语言模型(LLM)近年来取得了巨大进展,但要将其与人类价值观和意图相一致,使其变得有用、诚实和无害,仍然是一个挑战。强化学习从人类反馈中(RLHF)是一种常用的方法,通过微调…

Charles的安装和web端抓包配置

1.Charles的安装 通过官网下载:https://www.charlesproxy.com/download/,我之前下载的是4.6.2版本,下载成功后点击安装包,点击下一步下一步即可安装成功。 ​​ ​ 安装成功后打开charles页面如下所示。 ​ 2.乱码问题解决 打开…

【C++】STL:栈和队列模拟实现

💞💞 前言 hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#x…

绘画参数配置及使用

绘画参数配置及使用 路径:站点后台-功能-AI绘画 进入参数配置 接口选择:多种接口自主选择(需自己准备key),对应接口的key对话和绘画通用 存储空间: 位置在超管后台-存储空间 自主选择存储(需…

【数据结构与算法】七大排序算法(下)

【数据结构与算法】七大排序算法(下) 🥕个人主页:开敲🍉 🔥所属专栏:数据结构与算法🍅 🌼文章目录🌼 2.3 交换排序 2.3.1 冒泡排序 2.3.2 快速排序 2.3.3 快速排序(非递归) 2.4 归并…

fpga入门 串口定时1秒发送1字节

一、 程序说明 FPGA通过串口定时发送数据,每秒发送1字节,数据不断自增 参考小梅哥教程 二、 uart_tx.v timescale 1ns / 1psmodule uart_tx(input wire sclk,input wire rst_n,output reg uart_tx);parameter …

【Python Cookbook】S01E12 根据字段将记录分组

目录 问题解决方案讨论 问题 如果有一系列的字典或对象实例,我们想根据某个特定的字段来分组迭代数据。 解决方案 假设有如下字典列表: rows [{address: 5412 N CLARK, date: 07/01/2012},{address: 5148 N CLARK, date: 07/04/2012},{address: 580…

W25Q64CV SPI Flash Memory

SPI简介 SPI是一种同步串行通信接口规范,用于短距离通信,主要应用于嵌入式系统。SPI通信由一个主设备和一个或多个从设备组成,其中主设备生成时钟信号并控制通信的开始和结束。 SPI通信的基本组成 四个基本信号 SCK (Serial Clock) - 时钟…

centos7下安装MySQL,Oracle数据库

📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️宝剑锋从磨砺出,梅花香自苦寒来 操作系统版本为CentOS 7 使⽤ MySQ…

python数据分析——datetime数据类型2

参考资料:活用pandas库 # 导入pandas库 import pandas as pd # 加载数据集 teslapd.read_csv(r"...\data\tesla_stock_yahoo.csv") # 查看数据 print(tesla.head()) 1、基于日期取数据子集 # 将Date数据列转换为datetime类型 tesla[Date]pd.to_datetime…

学习笔记——网络参考模型——TCP/IP模型(传输层)

四、TCP/IP模型-传输层 一、TCP 1、TCP定义 TCP(Transmission Control Protocol,传输控制协议)∶为应用程序提供可靠的面向连接的通信服务。目前,许多流行的应用程序都使用TCP。 连接:正式发送数据之前,提前建立好一种虚拟的&…

ES6-03-模版字符串、对象的简化写法

一、模版字符串 1-1、声明 反引号。 1-2、特性 1、字符串内容可以直接换行 得用号连接 2、变量拼接 现在: 二、对象的简化写法 ES6允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。 let name milk;let chage function(){con…

脚本实现登陆滑块

脚本实现登陆滑块 仅供学习参考,简单操作 你知道吗,滑动验证码居然是为了验证人类比机器人蠢而设计的。 你以为自己快速、准确地滑动拼图、对齐图案,才被允许通过,系统还说你超越了99%的用户,夸你“比闪电还快”&am…

STM32_SPI

1、SPI简介 1.1 什么是SPI SPI,即Serial Peripheral Interface,串行外设接口。SPI是一种高速的、全双工、同步的串行通信总线;SPI采用主从方式工作,一般有一个主设备和一个或多个从设备;SPI需要至少4根线,…

FLINK-窗口算子

参考资料 官方文档- WindowFlink中的时间和窗口之窗口 窗口 在流处理中,我们往往需要面对的是连续不断、无休无止的无界流,不可能等到所有所有数据都到齐了才开始处理。所以聚合计算其实只能针对当前已有的数据——之后再有数据到来,就需要继…