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() {
            @Override
            public 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.mfbz.cn/a/673462.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python | Leetcode Python题解之第128题最长连续序列

题目: 题解: class Solution:def longestConsecutive(self, nums: List[int]) -> int:longest_streak 0num_set set(nums)for num in num_set:if num - 1 not in num_set:current_num numcurrent_streak 1while current_num 1 in num_set:curre…

GDPU unity游戏开发 动画状态机

每一个动画状态都演绎着你的奔赴。 动画混合 1) 前往 Mixamo选择适合的角色模型和idle/walking/backward动画并下载。确保下载时选择FBX for Unity格式。 2) 新建Unity项目,导入下载的模型。 3) 在导入模型的Inspector窗口中,选择Materials选项卡&a…

美国前总统特朗普竟然入驻TikTok,粉丝破24万

大家好! 我是老洪! 刚看到一则关于美国前总统特朗普的新闻, 特朗普竟然入驻TikTok了,太令人惊讶了。(为什么惊讶,后面再说) 更为惊人的是,他的到来竟然引来了众多粉丝的热烈追捧&…

高斯混合模型聚类算法的实现

目录 1. 作者介绍2. 聚类简介2.1 K-Means聚类简介2.2 高斯混合聚类简介 3. 实验过程3.1 数据集介绍3.2 代码思路3.3 算法评价3.4 代码实现3.5 实验结果 4. 参考链接 1. 作者介绍 赵子仪,女,西安工程大学电子信息学院,2023级研究生 研究方向&…

STM32(十):SPI (标准库函数)

前言 上一篇文章已经介绍了如何用STM32单片机中USART通信协议来串口通信,并向XCOM串口助手发送信息。这篇文章我们来介绍一下如何用STM32单片机中SPI接口来实现LED的闪亮并玩转WS2812B灯带。 一、实验原理 串行通信之前的博客里有所介绍,可以查看以下…

回退背包专题

P4141 消失之物 题目意思,就是说有n个物品,然后每个物品都有自己的体积w[i],然后问你,如果第i个物品丢了之后,还能够装满这个背包的方法,然后遍历一遍i同时也要遍历一遍背包,因为背包的值是在1到…

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…

【Linux 网络编程】OSI 七层模型初识、网络传输的流程、IP地址和MAC地址!

文章目录 1. OSI七层模型2. TCP/IP五层(或四层)模型3. 网络传输基本流程 🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧&#…

Golang | Leetcode Golang题解之第127题单词接龙

题目: 题解: func ladderLength(beginWord string, endWord string, wordList []string) int {wordId : map[string]int{}graph : [][]int{}addWord : func(word string) int {id, has : wordId[word]if !has {id len(wordId)wordId[word] idgraph a…

Flink系列三:Flink架构、独立集群搭建及Flink on YARN模式详解

一、Flink架构 Flink 是一个分布式系统,需要有效分配和管理计算资源才能执行流应用程序。它集成了所有常见的集群资源管理器,例如Hadoop yarn,但也可以设置作为独立集群甚至库运行。 Flink 集群剖析 Flink 运行时由两种类型的进程组成&…

数据分析常用模型合集(一)AARRR模型和漏斗模型

准备把常用的数据分析模型,像什么AARRR,RFM之类的,逐个全部写一下; 最好能带点案例和代码,搞一个小合集。 最终达到完全不懂的人,看完就能知道得差不多; 数据分析常用模型合集(二…

TiDB-从0到1-分布式存储

TiDB从0到1系列 TiDB-从0到1-体系结构TiDB-从0到1-分布式存储TiDB-从0到1-分布式事务TiDB-从0到1-MVCC 一、TiDB-DML语句执行流程(增删改) DML流程概要 1、协议验证 用户连接到TiDB Server后首先工作的是Protocol Layer模块,该模块会对用…

FuTalk设计周刊-Vol.046

# AI漫谈 热点捕手 1、Stable Diffusion 可以生成透明的 PNG 图片了 用 SD 直接生成透明的 PNG 图片,也可以直接生成带有透明度分层的图片,LayerDiffusion 使得大型已经过预训练的潜在扩散模型(latent diffusion model)能够创造…

docker学习--最详细的docker run 各子命令解释与应用

文章目录 docker run应用docker run -it那怎样才能退出容器而不用容器关闭呢 docker run -d-p-P--name docker run 容器运行命令 docker run 常见的子命令及其含义 -i 交互式,和-t一起使用 -t 打开一个终端 -d 后台运行 -p/-P 暴露容器中的服务端口 –name 指定容…

计算机组成原理----浮点数的表示和运算

目录 一.浮点数的表示 1.浮点数的作用和基本原理 2.浮点数的规格化 3.浮点数的表示范围 二.IEEE 754标准 三.浮点数的加减运算 1.加减运算 2.强制类型转换 一.浮点数的表示 1.浮点数的作用和基本原理 定点数在字节数固定的情况下,能表示的数字是很有限的&…

C++ | Leetcode C++题解之第128题最长连续序列

题目&#xff1a; 题解&#xff1a; class Solution { public:int longestConsecutive(vector<int>& nums) {unordered_set<int> num_set;for (const int& num : nums) {num_set.insert(num);}int longestStreak 0;for (const int& num : num_set) {…

SAP PP学习笔记15 - MTS(Make-to-Stock) 按库存生产(策略11,策略30)

上一章学习了MTS&#xff08;Make-to-Stock&#xff09;按库存生产&#xff08;策略10&#xff09;。 SAP PP学习笔记14 - MTS&#xff08;Make-to-Stock) 按库存生产&#xff08;策略10&#xff09;&#xff0c;以及生产计划的概要-CSDN博客 本章继续讲MTS&#xff08;Make-t…

Prism 入门01,基础

Prism 框架是支持多平台的一种MVVM框架(Model-View-ViewModel) 除了具备一些基础的属性通知绑定,命令操作,消息聚合器等功能外。还具备一些强大的功能:例如,区域,导航,会话服务,模块注入等特性。 一.如何在WPF 项目中使用Prism 框架 1.打开Visual Studio 2022,选择创…

Java | Leetcode Java题解之第128题最长连续序列

题目&#xff1a; 题解&#xff1a; class Solution {public int longestConsecutive(int[] nums) {Set<Integer> num_set new HashSet<Integer>();for (int num : nums) {num_set.add(num);}int longestStreak 0;for (int num : num_set) {if (!num_set.contai…

边缘计算的AI小板——OrangePi AI Pro

简介 OrangePi AI Pro是一款基于Allwinner H6处理器的嵌入式AI计算设备&#xff0c;适用于物联网和边缘计算。它具有强大的性能、低功耗、多接口和小尺寸。 本文分为三个部分&#xff1a; 一、对该板进行简单的开箱介绍。 二、 将SD卡中的系统迁移到由于该板支持SD卡、SSD…