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,一经查实,立即删除!

相关文章

速盾:速盾高防cdn的防御原理?

速盾高防CDN是一种专业的网络安全解决方案,通过多种防御措施保护网站不受各种网络攻击的影响。其防御原理主要包括以下几个方面: 高强度DDoS防护 速盾高防CDN采用了弹性云防护集群,能够应对大规模的分布式拒绝服务(DDoS&#xff0…

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 $…

Python知识点1---变量和数据类型

提前说一点:如果你是专注于Python开发,那么本系列知识点只是带你入个门再详细的开发点就要去看其他资料了,而如果你和作者一样只是操作其他技术的Python API那就足够了。 在所有知识开始前,先给大家介绍一下Python的注释&#xf…

使用STM32和TB6600驱动器控制42BYGH步进电机

项目概述 1. 系统组成 STM32微控制器:作为主控制器,负责发出控制指令。TB6600驱动器:用于接收STM32的指令并驱动步进电机。42BYGH步进电机:作为执行元件,根据控制信号进行转动。电源:为STM32、TB6600和步…

Unity MiniCPM-V 让引擎拥有视觉

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

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

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

Java Web是前端吗:深入解析Java Web技术的定位与边界

Java Web是前端吗:深入解析Java Web技术的定位与边界 在探讨Java Web是否属于前端领域时,我们首先需要明确Java Web技术的定位和它所涉及的范畴。本文将从四个方面、五个方面、六个方面和七个方面来深入解析这一问题,带您领略Java Web技术的…

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

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

linux pigz 多线程压缩解压

压缩: tar --use-compress-programpigz -cvpf abc.tgz ./abc 解压: tar --use-compress-programpigz -xvf ./abc.tgz 解压到指定位置:tar --use-compress-programpigz -xvf ./abc.tgz -C ./hhh

原生js访问http获取数据的方法

在原生JavaScript中,直接通过浏览器端的JavaScript访问HTTP接口获取数据通常涉及XMLHttpRequest对象或现代的fetch API。 1. 使用XMLHttpRequest XMLHttpRequest是一个老旧的API,但在某些情况下仍然很有用。以下是一个简单的例子: javascr…

打造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 …

Spring bean加载顺序

最近在开发过程中遇到一个Spring bean加载顺序的问题,容器在启动的时候 会通过InitializingBean 的afterPropertiesSet 加载两级缓存,但是加载的过程中因为没有将load的容器对象加载到Spring 容器中导致NPE ,所以今天来巩固一下spring bean的…

【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) - 时钟…